XCloner – Backup and Restore - Version 4.2.1

Version Description

= 3.0.3 = Please check changelog!

Download this release

Release Info

Developer watchful
Plugin Icon 128x128 XCloner – Backup and Restore
Version 4.2.1
Comparing to
See all releases

Code changes from version 4.2.0 to 4.2.1

Files changed (510) hide show
  1. .github/ISSUE_TEMPLATE/pre-release-testing.md +36 -0
  2. CHANGELOG.md +28 -2
  3. README.txt +23 -15
  4. admin/class-xcloner-admin.php +1 -1
  5. admin/css/xcloner-admin.css +2 -1
  6. admin/partials/xcloner_restore_page.php +12 -8
  7. admin/partials/xcloner_scheduled_backups_page.php +1 -1
  8. composer.json +1 -0
  9. composer.lock +634 -163
  10. examples/cli_encrypt_backup.php +8 -2
  11. examples/standalone-backup-trigger.php +2 -15
  12. includes/class-xcloner-api.php +0 -1507
  13. includes/class-xcloner-archive.php +0 -1077
  14. includes/class-xcloner-database.php +0 -674
  15. includes/class-xcloner-encryption.php +0 -395
  16. includes/class-xcloner-file-system.php +0 -1114
  17. includes/class-xcloner-file-transfer.php +0 -165
  18. includes/class-xcloner-i18n.php +0 -61
  19. includes/class-xcloner-loader.php +0 -167
  20. includes/class-xcloner-logger.php +0 -138
  21. includes/class-xcloner-remote-storage.php +0 -858
  22. includes/class-xcloner-requirements.php +0 -169
  23. includes/class-xcloner-sanitization.php +0 -119
  24. includes/class-xcloner-scheduler.php +0 -487
  25. includes/class-xcloner-settings.php +0 -1168
  26. includes/class-xcloner-standalone.php +0 -105
  27. includes/class-xcloner.php +55 -110
  28. includes/index.php +0 -1
  29. lib/mock_wp_functions.php +0 -459
  30. public/class-xcloner-public.php +0 -102
  31. public/css/xcloner-public.css +0 -4
  32. public/index.php +0 -1
  33. public/js/xcloner-public.js +0 -32
  34. public/partials/xcloner-public-display.php +0 -16
  35. restore/generate_phar.php +27 -0
  36. restore/vendor.build.txt +0 -0
  37. restore/xcloner_restore.php +1169 -1350
  38. vendor/aws/aws-sdk-php/.changes/3.100.0 +27 -0
  39. vendor/aws/aws-sdk-php/.changes/3.100.1 +7 -0
  40. vendor/aws/aws-sdk-php/.changes/3.100.2 +7 -0
  41. vendor/aws/aws-sdk-php/.changes/3.100.3 +27 -0
  42. vendor/aws/aws-sdk-php/.changes/3.100.4 +22 -0
  43. vendor/aws/aws-sdk-php/.changes/3.100.5 +17 -0
  44. vendor/aws/aws-sdk-php/.changes/3.100.6 +12 -0
  45. vendor/aws/aws-sdk-php/.changes/3.100.7 +7 -0
  46. vendor/aws/aws-sdk-php/.changes/3.100.8 +37 -0
  47. vendor/aws/aws-sdk-php/.changes/3.100.9 +22 -0
  48. vendor/aws/aws-sdk-php/.changes/3.101.0 +47 -0
  49. vendor/aws/aws-sdk-php/.changes/3.101.1 +12 -0
  50. vendor/aws/aws-sdk-php/.changes/3.102.0 +22 -0
  51. vendor/aws/aws-sdk-php/.changes/3.102.1 +12 -0
  52. vendor/aws/aws-sdk-php/.changes/3.103.0 +22 -0
  53. vendor/aws/aws-sdk-php/.changes/3.103.1 +22 -0
  54. vendor/aws/aws-sdk-php/.changes/3.103.2 +22 -0
  55. vendor/aws/aws-sdk-php/.changes/3.104.0 +17 -0
  56. vendor/aws/aws-sdk-php/.changes/3.104.1 +22 -0
  57. vendor/aws/aws-sdk-php/.changes/3.105.0 +22 -0
  58. vendor/aws/aws-sdk-php/.changes/3.106.0 +57 -0
  59. vendor/aws/aws-sdk-php/.changes/3.106.1 +22 -0
  60. vendor/aws/aws-sdk-php/.changes/3.107.0 +12 -0
  61. vendor/aws/aws-sdk-php/.changes/3.107.1 +32 -0
  62. vendor/aws/aws-sdk-php/.changes/3.107.2 +22 -0
  63. vendor/aws/aws-sdk-php/.changes/3.107.3 +22 -0
  64. vendor/aws/aws-sdk-php/.changes/3.107.4 +12 -0
  65. vendor/aws/aws-sdk-php/.changes/3.107.5 +12 -0
  66. vendor/aws/aws-sdk-php/.changes/3.107.6 +12 -0
  67. vendor/aws/aws-sdk-php/.changes/3.107.7 +22 -0
  68. vendor/aws/aws-sdk-php/.changes/3.107.8 +17 -0
  69. vendor/aws/aws-sdk-php/.changes/3.108.0 +47 -0
  70. vendor/aws/aws-sdk-php/.changes/3.108.1 +7 -0
  71. vendor/aws/aws-sdk-php/.changes/3.108.2 +17 -0
  72. vendor/aws/aws-sdk-php/.changes/3.108.3 +12 -0
  73. vendor/aws/aws-sdk-php/.changes/3.108.4 +17 -0
  74. vendor/aws/aws-sdk-php/.changes/3.108.5 +7 -0
  75. vendor/aws/aws-sdk-php/.changes/3.108.6 +7 -0
  76. vendor/aws/aws-sdk-php/.changes/3.109.0 +22 -0
  77. vendor/aws/aws-sdk-php/.changes/3.109.1 +37 -0
  78. vendor/aws/aws-sdk-php/.changes/3.109.2 +22 -0
  79. vendor/aws/aws-sdk-php/.changes/3.109.3 +7 -0
  80. vendor/aws/aws-sdk-php/.changes/3.109.4 +7 -0
  81. vendor/aws/aws-sdk-php/.changes/3.109.5 +32 -0
  82. vendor/aws/aws-sdk-php/.changes/3.109.6 +17 -0
  83. vendor/aws/aws-sdk-php/.changes/3.109.7 +12 -0
  84. vendor/aws/aws-sdk-php/.changes/3.109.8 +22 -0
  85. vendor/aws/aws-sdk-php/.changes/3.110.0 +37 -0
  86. vendor/aws/aws-sdk-php/.changes/3.110.1 +17 -0
  87. vendor/aws/aws-sdk-php/.changes/3.110.10 +7 -0
  88. vendor/aws/aws-sdk-php/.changes/3.110.11 +7 -0
  89. vendor/aws/aws-sdk-php/.changes/3.110.2 +17 -0
  90. vendor/aws/aws-sdk-php/.changes/3.110.3 +17 -0
  91. vendor/aws/aws-sdk-php/.changes/3.110.4 +7 -0
  92. vendor/aws/aws-sdk-php/.changes/3.110.5 +17 -0
  93. vendor/aws/aws-sdk-php/.changes/3.110.6 +27 -0
  94. vendor/aws/aws-sdk-php/.changes/3.110.7 +17 -0
  95. vendor/aws/aws-sdk-php/.changes/3.110.8 +17 -0
  96. vendor/aws/aws-sdk-php/.changes/3.110.9 +17 -0
  97. vendor/aws/aws-sdk-php/.changes/3.111.0 +37 -0
  98. vendor/aws/aws-sdk-php/.changes/3.111.1 +7 -0
  99. vendor/aws/aws-sdk-php/.changes/3.111.2 +32 -0
  100. vendor/aws/aws-sdk-php/.changes/3.112.0 +22 -0
  101. vendor/aws/aws-sdk-php/.changes/3.112.1 +12 -0
  102. vendor/aws/aws-sdk-php/.changes/3.112.10 +12 -0
  103. vendor/aws/aws-sdk-php/.changes/3.112.11 +17 -0
  104. vendor/aws/aws-sdk-php/.changes/3.112.12 +7 -0
  105. vendor/aws/aws-sdk-php/.changes/3.112.13 +7 -0
  106. vendor/aws/aws-sdk-php/.changes/3.112.14 +27 -0
  107. vendor/aws/aws-sdk-php/.changes/3.112.15 +17 -0
  108. vendor/aws/aws-sdk-php/.changes/3.112.16 +32 -0
  109. vendor/aws/aws-sdk-php/.changes/3.112.17 +22 -0
  110. vendor/aws/aws-sdk-php/.changes/3.112.18 +17 -0
  111. vendor/aws/aws-sdk-php/.changes/3.112.19 +22 -0
  112. vendor/aws/aws-sdk-php/.changes/3.112.2 +22 -0
  113. vendor/aws/aws-sdk-php/.changes/3.112.20 +7 -0
  114. vendor/aws/aws-sdk-php/.changes/3.112.21 +12 -0
  115. vendor/aws/aws-sdk-php/.changes/3.112.22 +7 -0
  116. vendor/aws/aws-sdk-php/.changes/3.112.23 +17 -0
  117. vendor/aws/aws-sdk-php/.changes/3.112.24 +17 -0
  118. vendor/aws/aws-sdk-php/.changes/3.112.25 +7 -0
  119. vendor/aws/aws-sdk-php/.changes/3.112.26 +12 -0
  120. vendor/aws/aws-sdk-php/.changes/3.112.27 +17 -0
  121. vendor/aws/aws-sdk-php/.changes/3.112.28 +27 -0
  122. vendor/aws/aws-sdk-php/.changes/3.112.29 +17 -0
  123. vendor/aws/aws-sdk-php/.changes/3.112.3 +17 -0
  124. vendor/aws/aws-sdk-php/.changes/3.112.30 +7 -0
  125. vendor/aws/aws-sdk-php/.changes/3.112.31 +12 -0
  126. vendor/aws/aws-sdk-php/.changes/3.112.32 +7 -0
  127. vendor/aws/aws-sdk-php/.changes/3.112.33 +17 -0
  128. vendor/aws/aws-sdk-php/.changes/3.112.34 +17 -0
  129. vendor/aws/aws-sdk-php/.changes/3.112.35 +17 -0
  130. vendor/aws/aws-sdk-php/.changes/3.112.4 +17 -0
  131. vendor/aws/aws-sdk-php/.changes/3.112.5 +22 -0
  132. vendor/aws/aws-sdk-php/.changes/3.112.6 +12 -0
  133. vendor/aws/aws-sdk-php/.changes/3.112.7 +22 -0
  134. vendor/aws/aws-sdk-php/.changes/3.112.8 +17 -0
  135. vendor/aws/aws-sdk-php/.changes/3.112.9 +12 -0
  136. vendor/aws/aws-sdk-php/.changes/3.113.0 +12 -0
  137. vendor/aws/aws-sdk-php/.changes/3.114.0 +32 -0
  138. vendor/aws/aws-sdk-php/.changes/3.114.1 +7 -0
  139. vendor/aws/aws-sdk-php/.changes/3.115.0 +22 -0
  140. vendor/aws/aws-sdk-php/.changes/3.115.1 +12 -0
  141. vendor/aws/aws-sdk-php/.changes/3.115.2 +12 -0
  142. vendor/aws/aws-sdk-php/.changes/3.116.0 +27 -0
  143. vendor/aws/aws-sdk-php/.changes/3.117.0 +32 -0
  144. vendor/aws/aws-sdk-php/.changes/3.117.1 +27 -0
  145. vendor/aws/aws-sdk-php/.changes/3.117.2 +57 -0
  146. vendor/aws/aws-sdk-php/.changes/3.118.0 +42 -0
  147. vendor/aws/aws-sdk-php/.changes/3.119.0 +57 -0
  148. vendor/aws/aws-sdk-php/.changes/3.120.0 +92 -0
  149. vendor/aws/aws-sdk-php/.changes/3.121.0 +67 -0
  150. vendor/aws/aws-sdk-php/.changes/3.121.1 +62 -0
  151. vendor/aws/aws-sdk-php/.changes/3.122.0 +147 -0
  152. vendor/aws/aws-sdk-php/.changes/3.123.0 +57 -0
  153. vendor/aws/aws-sdk-php/.changes/3.124.0 +22 -0
  154. vendor/aws/aws-sdk-php/.changes/3.125.0 +7 -0
  155. vendor/aws/aws-sdk-php/.changes/3.126.0 +77 -0
  156. vendor/aws/aws-sdk-php/.changes/3.127.0 +47 -0
  157. vendor/aws/aws-sdk-php/.changes/3.128.0 +22 -0
  158. vendor/aws/aws-sdk-php/.changes/3.128.1 +27 -0
  159. vendor/aws/aws-sdk-php/.changes/3.128.2 +12 -0
  160. vendor/aws/aws-sdk-php/.changes/3.128.3 +7 -0
  161. vendor/aws/aws-sdk-php/.changes/3.128.4 +7 -0
  162. vendor/aws/aws-sdk-php/.changes/3.129.0 +22 -0
  163. vendor/aws/aws-sdk-php/.changes/3.129.1 +17 -0
  164. vendor/aws/aws-sdk-php/.changes/3.129.2 +32 -0
  165. vendor/aws/aws-sdk-php/.changes/3.129.3 +32 -0
  166. vendor/aws/aws-sdk-php/.changes/3.130.0 +47 -0
  167. vendor/aws/aws-sdk-php/.changes/3.130.1 +47 -0
  168. vendor/aws/aws-sdk-php/.changes/3.130.2 +17 -0
  169. vendor/aws/aws-sdk-php/.changes/3.130.3 +22 -0
  170. vendor/aws/aws-sdk-php/.changes/3.131.0 +27 -0
  171. vendor/aws/aws-sdk-php/.changes/3.132.0 +22 -0
  172. vendor/aws/aws-sdk-php/.changes/3.132.1 +22 -0
  173. vendor/aws/aws-sdk-php/.changes/3.132.2 +12 -0
  174. vendor/aws/aws-sdk-php/.changes/3.132.3 +37 -0
  175. vendor/aws/aws-sdk-php/.changes/3.132.4 +17 -0
  176. vendor/aws/aws-sdk-php/.changes/3.132.5 +7 -0
  177. vendor/aws/aws-sdk-php/.changes/3.133.0 +32 -0
  178. vendor/aws/aws-sdk-php/.changes/3.133.1 +17 -0
  179. vendor/aws/aws-sdk-php/.changes/3.133.10 +17 -0
  180. vendor/aws/aws-sdk-php/.changes/3.133.11 +12 -0
  181. vendor/aws/aws-sdk-php/.changes/3.133.12 +17 -0
  182. vendor/aws/aws-sdk-php/.changes/3.133.13 +47 -0
  183. vendor/aws/aws-sdk-php/.changes/3.133.14 +7 -0
  184. vendor/aws/aws-sdk-php/.changes/3.133.15 +32 -0
  185. vendor/aws/aws-sdk-php/.changes/3.133.16 +22 -0
  186. vendor/aws/aws-sdk-php/.changes/3.133.17 +17 -0
  187. vendor/aws/aws-sdk-php/.changes/3.133.18 +17 -0
  188. vendor/aws/aws-sdk-php/.changes/3.133.19 +17 -0
  189. vendor/aws/aws-sdk-php/.changes/3.133.2 +32 -0
  190. vendor/aws/aws-sdk-php/.changes/3.133.20 +17 -0
  191. vendor/aws/aws-sdk-php/.changes/3.133.21 +32 -0
  192. vendor/aws/aws-sdk-php/.changes/3.133.22 +22 -0
  193. vendor/aws/aws-sdk-php/.changes/3.133.23 +22 -0
  194. vendor/aws/aws-sdk-php/.changes/3.133.24 +12 -0
  195. vendor/aws/aws-sdk-php/.changes/3.133.25 +47 -0
  196. vendor/aws/aws-sdk-php/.changes/3.133.26 +7 -0
  197. vendor/aws/aws-sdk-php/.changes/3.133.27 +12 -0
  198. vendor/aws/aws-sdk-php/.changes/3.133.28 +7 -0
  199. vendor/aws/aws-sdk-php/.changes/3.133.29 +12 -0
  200. vendor/aws/aws-sdk-php/.changes/3.133.3 +32 -0
  201. vendor/aws/aws-sdk-php/.changes/3.133.30 +22 -0
  202. vendor/aws/aws-sdk-php/.changes/3.133.31 +27 -0
  203. vendor/aws/aws-sdk-php/.changes/3.133.32 +17 -0
  204. vendor/aws/aws-sdk-php/.changes/3.133.33 +27 -0
  205. vendor/aws/aws-sdk-php/.changes/3.133.34 +12 -0
  206. vendor/aws/aws-sdk-php/.changes/3.133.35 +27 -0
  207. vendor/aws/aws-sdk-php/.changes/3.133.36 +7 -0
  208. vendor/aws/aws-sdk-php/.changes/3.133.37 +27 -0
  209. vendor/aws/aws-sdk-php/.changes/3.133.38 +12 -0
  210. vendor/aws/aws-sdk-php/.changes/3.133.39 +17 -0
  211. vendor/aws/aws-sdk-php/.changes/3.133.4 +27 -0
  212. vendor/aws/aws-sdk-php/.changes/3.133.40 +12 -0
  213. vendor/aws/aws-sdk-php/.changes/3.133.41 +7 -0
  214. vendor/aws/aws-sdk-php/.changes/3.133.42 +17 -0
  215. vendor/aws/aws-sdk-php/.changes/3.133.43 +22 -0
  216. vendor/aws/aws-sdk-php/.changes/3.133.44 +32 -0
  217. vendor/aws/aws-sdk-php/.changes/3.133.45 +17 -0
  218. vendor/aws/aws-sdk-php/.changes/3.133.46 +17 -0
  219. vendor/aws/aws-sdk-php/.changes/3.133.47 +7 -0
  220. vendor/aws/aws-sdk-php/.changes/3.133.5 +12 -0
  221. vendor/aws/aws-sdk-php/.changes/3.133.6 +27 -0
  222. vendor/aws/aws-sdk-php/.changes/3.133.7 +37 -0
  223. vendor/aws/aws-sdk-php/.changes/3.133.8 +37 -0
  224. vendor/aws/aws-sdk-php/.changes/3.133.9 +32 -0
  225. vendor/aws/aws-sdk-php/.changes/3.134.0 +72 -0
  226. vendor/aws/aws-sdk-php/.changes/3.134.1 +12 -0
  227. vendor/aws/aws-sdk-php/.changes/3.134.2 +27 -0
  228. vendor/aws/aws-sdk-php/.changes/3.134.3 +12 -0
  229. vendor/aws/aws-sdk-php/.changes/3.134.4 +22 -0
  230. vendor/aws/aws-sdk-php/.changes/3.134.5 +17 -0
  231. vendor/aws/aws-sdk-php/.changes/3.134.6 +37 -0
  232. vendor/aws/aws-sdk-php/.changes/3.134.7 +67 -0
  233. vendor/aws/aws-sdk-php/.changes/3.134.8 +12 -0
  234. vendor/aws/aws-sdk-php/.changes/3.135.0 +27 -0
  235. vendor/aws/aws-sdk-php/.changes/3.135.1 +22 -0
  236. vendor/aws/aws-sdk-php/.changes/3.135.2 +27 -0
  237. vendor/aws/aws-sdk-php/.changes/3.135.3 +47 -0
  238. vendor/aws/aws-sdk-php/.changes/3.135.4 +17 -0
  239. vendor/aws/aws-sdk-php/.changes/3.135.5 +22 -0
  240. vendor/aws/aws-sdk-php/.changes/3.135.6 +32 -0
  241. vendor/aws/aws-sdk-php/.changes/3.136.0 +27 -0
  242. vendor/aws/aws-sdk-php/.changes/3.137.0 +37 -0
  243. vendor/aws/aws-sdk-php/.changes/3.137.1 +12 -0
  244. vendor/aws/aws-sdk-php/.changes/3.137.2 +17 -0
  245. vendor/aws/aws-sdk-php/.changes/3.137.3 +17 -0
  246. vendor/aws/aws-sdk-php/.changes/3.137.4 +12 -0
  247. vendor/aws/aws-sdk-php/.changes/3.137.5 +37 -0
  248. vendor/aws/aws-sdk-php/.changes/3.137.6 +17 -0
  249. vendor/aws/aws-sdk-php/.changes/3.137.7 +17 -0
  250. vendor/aws/aws-sdk-php/.changes/3.137.8 +12 -0
  251. vendor/aws/aws-sdk-php/.changes/3.138.0 +12 -0
  252. vendor/aws/aws-sdk-php/.changes/3.138.1 +12 -0
  253. vendor/aws/aws-sdk-php/.changes/3.138.10 +22 -0
  254. vendor/aws/aws-sdk-php/.changes/3.138.2 +22 -0
  255. vendor/aws/aws-sdk-php/.changes/3.138.3 +32 -0
  256. vendor/aws/aws-sdk-php/.changes/3.138.4 +22 -0
  257. vendor/aws/aws-sdk-php/.changes/3.138.5 +47 -0
  258. vendor/aws/aws-sdk-php/.changes/3.138.6 +22 -0
  259. vendor/aws/aws-sdk-php/.changes/3.138.7 +12 -0
  260. vendor/aws/aws-sdk-php/.changes/3.138.8 +32 -0
  261. vendor/aws/aws-sdk-php/.changes/3.138.9 +17 -0
  262. vendor/aws/aws-sdk-php/.changes/3.139.0 +37 -0
  263. vendor/aws/aws-sdk-php/.changes/3.139.1 +7 -0
  264. vendor/aws/aws-sdk-php/.changes/3.140.0 +42 -0
  265. vendor/aws/aws-sdk-php/.changes/3.140.1 +27 -0
  266. vendor/aws/aws-sdk-php/.changes/3.140.2 +42 -0
  267. vendor/aws/aws-sdk-php/.changes/3.140.3 +12 -0
  268. vendor/aws/aws-sdk-php/.changes/3.22.10 +7 -0
  269. vendor/aws/aws-sdk-php/.changes/3.22.11 +7 -0
  270. vendor/aws/aws-sdk-php/.changes/3.22.9 +22 -0
  271. vendor/aws/aws-sdk-php/.changes/3.23.0 +27 -0
  272. vendor/aws/aws-sdk-php/.changes/3.23.2 +12 -0
  273. vendor/aws/aws-sdk-php/.changes/3.23.3 +7 -0
  274. vendor/aws/aws-sdk-php/.changes/3.24.0 +7 -0
  275. vendor/aws/aws-sdk-php/.changes/3.24.1 +12 -0
  276. vendor/aws/aws-sdk-php/.changes/3.24.2 +12 -0
  277. vendor/aws/aws-sdk-php/.changes/3.24.3 +12 -0
  278. vendor/aws/aws-sdk-php/.changes/3.24.4 +7 -0
  279. vendor/aws/aws-sdk-php/.changes/3.24.5 +17 -0
  280. vendor/aws/aws-sdk-php/.changes/3.24.6 +17 -0
  281. vendor/aws/aws-sdk-php/.changes/3.24.7 +7 -0
  282. vendor/aws/aws-sdk-php/.changes/3.24.8 +7 -0
  283. vendor/aws/aws-sdk-php/.changes/3.24.9 +12 -0
  284. vendor/aws/aws-sdk-php/.changes/3.25.0 +22 -0
  285. vendor/aws/aws-sdk-php/.changes/3.25.1 +7 -0
  286. vendor/aws/aws-sdk-php/.changes/3.25.2 +7 -0
  287. vendor/aws/aws-sdk-php/.changes/3.25.3 +7 -0
  288. vendor/aws/aws-sdk-php/.changes/3.25.4 +7 -0
  289. vendor/aws/aws-sdk-php/.changes/3.25.5 +7 -0
  290. vendor/aws/aws-sdk-php/.changes/3.25.6 +7 -0
  291. vendor/aws/aws-sdk-php/.changes/3.25.7 +22 -0
  292. vendor/aws/aws-sdk-php/.changes/3.25.8 +7 -0
  293. vendor/aws/aws-sdk-php/.changes/3.26.0 +42 -0
  294. vendor/aws/aws-sdk-php/.changes/3.26.1 +32 -0
  295. vendor/aws/aws-sdk-php/.changes/3.26.2 +12 -0
  296. vendor/aws/aws-sdk-php/.changes/3.26.3 +7 -0
  297. vendor/aws/aws-sdk-php/.changes/3.26.4 +27 -0
  298. vendor/aws/aws-sdk-php/.changes/3.26.5 +7 -0
  299. vendor/aws/aws-sdk-php/.changes/3.27.0 +22 -0
  300. vendor/aws/aws-sdk-php/.changes/3.27.1 +12 -0
  301. vendor/aws/aws-sdk-php/.changes/3.27.2 +22 -0
  302. vendor/aws/aws-sdk-php/.changes/3.27.3 +7 -0
  303. vendor/aws/aws-sdk-php/.changes/3.27.4 +22 -0
  304. vendor/aws/aws-sdk-php/.changes/3.27.5 +22 -0
  305. vendor/aws/aws-sdk-php/.changes/3.28.0 +12 -0
  306. vendor/aws/aws-sdk-php/.changes/3.28.1 +12 -0
  307. vendor/aws/aws-sdk-php/.changes/3.28.10 +17 -0
  308. vendor/aws/aws-sdk-php/.changes/3.28.2 +7 -0
  309. vendor/aws/aws-sdk-php/.changes/3.28.3 +17 -0
  310. vendor/aws/aws-sdk-php/.changes/3.28.4 +12 -0
  311. vendor/aws/aws-sdk-php/.changes/3.28.5 +17 -0
  312. vendor/aws/aws-sdk-php/.changes/3.28.6 +7 -0
  313. vendor/aws/aws-sdk-php/.changes/3.28.7 +22 -0
  314. vendor/aws/aws-sdk-php/.changes/3.28.8 +12 -0
  315. vendor/aws/aws-sdk-php/.changes/3.28.9 +17 -0
  316. vendor/aws/aws-sdk-php/.changes/3.29.0 +12 -0
  317. vendor/aws/aws-sdk-php/.changes/3.29.1 +17 -0
  318. vendor/aws/aws-sdk-php/.changes/3.29.2 +7 -0
  319. vendor/aws/aws-sdk-php/.changes/3.29.3 +7 -0
  320. vendor/aws/aws-sdk-php/.changes/3.29.4 +7 -0
  321. vendor/aws/aws-sdk-php/.changes/3.29.5 +12 -0
  322. vendor/aws/aws-sdk-php/.changes/3.29.6 +22 -0
  323. vendor/aws/aws-sdk-php/.changes/3.29.7 +12 -0
  324. vendor/aws/aws-sdk-php/.changes/3.29.8 +7 -0
  325. vendor/aws/aws-sdk-php/.changes/3.29.9 +7 -0
  326. vendor/aws/aws-sdk-php/.changes/3.30.0 +22 -0
  327. vendor/aws/aws-sdk-php/.changes/3.30.1 +32 -0
  328. vendor/aws/aws-sdk-php/.changes/3.30.2 +7 -0
  329. vendor/aws/aws-sdk-php/.changes/3.30.3 +12 -0
  330. vendor/aws/aws-sdk-php/.changes/3.30.4 +17 -0
  331. vendor/aws/aws-sdk-php/.changes/3.31.0 +17 -0
  332. vendor/aws/aws-sdk-php/.changes/3.31.1 +12 -0
  333. vendor/aws/aws-sdk-php/.changes/3.31.10 +12 -0
  334. vendor/aws/aws-sdk-php/.changes/3.31.2 +27 -0
  335. vendor/aws/aws-sdk-php/.changes/3.31.3 +17 -0
  336. vendor/aws/aws-sdk-php/.changes/3.31.4 +17 -0
  337. vendor/aws/aws-sdk-php/.changes/3.31.5 +17 -0
  338. vendor/aws/aws-sdk-php/.changes/3.31.6 +12 -0
  339. vendor/aws/aws-sdk-php/.changes/3.31.7 +12 -0
  340. vendor/aws/aws-sdk-php/.changes/3.31.8 +7 -0
  341. vendor/aws/aws-sdk-php/.changes/3.31.9 +12 -0
  342. vendor/aws/aws-sdk-php/.changes/3.32.0 +22 -0
  343. vendor/aws/aws-sdk-php/.changes/3.32.1 +12 -0
  344. vendor/aws/aws-sdk-php/.changes/3.32.2 +17 -0
  345. vendor/aws/aws-sdk-php/.changes/3.32.3 +32 -0
  346. vendor/aws/aws-sdk-php/.changes/3.32.4 +12 -0
  347. vendor/aws/aws-sdk-php/.changes/3.32.5 +7 -0
  348. vendor/aws/aws-sdk-php/.changes/3.32.6 +12 -0
  349. vendor/aws/aws-sdk-php/.changes/3.32.7 +17 -0
  350. vendor/aws/aws-sdk-php/.changes/3.33.0 +37 -0
  351. vendor/aws/aws-sdk-php/.changes/3.33.1 +7 -0
  352. vendor/aws/aws-sdk-php/.changes/3.33.2 +12 -0
  353. vendor/aws/aws-sdk-php/.changes/3.33.3 +7 -0
  354. vendor/aws/aws-sdk-php/.changes/3.33.4 +12 -0
  355. vendor/aws/aws-sdk-php/.changes/3.34.0 +17 -0
  356. vendor/aws/aws-sdk-php/.changes/3.34.1 +7 -0
  357. vendor/aws/aws-sdk-php/.changes/3.34.2 +7 -0
  358. vendor/aws/aws-sdk-php/.changes/3.35.0 +22 -0
  359. vendor/aws/aws-sdk-php/.changes/3.35.1 +12 -0
  360. vendor/aws/aws-sdk-php/.changes/3.35.2 +12 -0
  361. vendor/aws/aws-sdk-php/.changes/3.35.3 +22 -0
  362. vendor/aws/aws-sdk-php/.changes/3.36.0 +17 -0
  363. vendor/aws/aws-sdk-php/.changes/3.36.1 +7 -0
  364. vendor/aws/aws-sdk-php/.changes/3.36.10 +17 -0
  365. vendor/aws/aws-sdk-php/.changes/3.36.11 +7 -0
  366. vendor/aws/aws-sdk-php/.changes/3.36.12 +32 -0
  367. vendor/aws/aws-sdk-php/.changes/3.36.13 +17 -0
  368. vendor/aws/aws-sdk-php/.changes/3.36.14 +17 -0
  369. vendor/aws/aws-sdk-php/.changes/3.36.15 +7 -0
  370. vendor/aws/aws-sdk-php/.changes/3.36.16 +7 -0
  371. vendor/aws/aws-sdk-php/.changes/3.36.17 +32 -0
  372. vendor/aws/aws-sdk-php/.changes/3.36.18 +7 -0
  373. vendor/aws/aws-sdk-php/.changes/3.36.19 +12 -0
  374. vendor/aws/aws-sdk-php/.changes/3.36.2 +7 -0
  375. vendor/aws/aws-sdk-php/.changes/3.36.20 +17 -0
  376. vendor/aws/aws-sdk-php/.changes/3.36.21 +12 -0
  377. vendor/aws/aws-sdk-php/.changes/3.36.22 +12 -0
  378. vendor/aws/aws-sdk-php/.changes/3.36.23 +12 -0
  379. vendor/aws/aws-sdk-php/.changes/3.36.24 +17 -0
  380. vendor/aws/aws-sdk-php/.changes/3.36.25 +12 -0
  381. vendor/aws/aws-sdk-php/.changes/3.36.26 +27 -0
  382. vendor/aws/aws-sdk-php/.changes/3.36.27 +32 -0
  383. vendor/aws/aws-sdk-php/.changes/3.36.28 +17 -0
  384. vendor/aws/aws-sdk-php/.changes/3.36.29 +7 -0
  385. vendor/aws/aws-sdk-php/.changes/3.36.3 +27 -0
  386. vendor/aws/aws-sdk-php/.changes/3.36.30 +17 -0
  387. vendor/aws/aws-sdk-php/.changes/3.36.31 +7 -0
  388. vendor/aws/aws-sdk-php/.changes/3.36.32 +12 -0
  389. vendor/aws/aws-sdk-php/.changes/3.36.33 +22 -0
  390. vendor/aws/aws-sdk-php/.changes/3.36.34 +12 -0
  391. vendor/aws/aws-sdk-php/.changes/3.36.35 +17 -0
  392. vendor/aws/aws-sdk-php/.changes/3.36.36 +7 -0
  393. vendor/aws/aws-sdk-php/.changes/3.36.37 +7 -0
  394. vendor/aws/aws-sdk-php/.changes/3.36.4 +7 -0
  395. vendor/aws/aws-sdk-php/.changes/3.36.5 +7 -0
  396. vendor/aws/aws-sdk-php/.changes/3.36.6 +7 -0
  397. vendor/aws/aws-sdk-php/.changes/3.36.7 +22 -0
  398. vendor/aws/aws-sdk-php/.changes/3.36.8 +17 -0
  399. vendor/aws/aws-sdk-php/.changes/3.36.9 +7 -0
  400. vendor/aws/aws-sdk-php/.changes/3.37.0 +27 -0
  401. vendor/aws/aws-sdk-php/.changes/3.37.1 +32 -0
  402. vendor/aws/aws-sdk-php/.changes/3.38.0 +37 -0
  403. vendor/aws/aws-sdk-php/.changes/3.38.1 +7 -0
  404. vendor/aws/aws-sdk-php/.changes/3.38.2 +22 -0
  405. vendor/aws/aws-sdk-php/.changes/3.38.3 +22 -0
  406. vendor/aws/aws-sdk-php/.changes/3.38.4 +32 -0
  407. vendor/aws/aws-sdk-php/.changes/3.38.5 +27 -0
  408. vendor/aws/aws-sdk-php/.changes/3.39.0 +32 -0
  409. vendor/aws/aws-sdk-php/.changes/3.39.1 +42 -0
  410. vendor/aws/aws-sdk-php/.changes/3.39.2 +22 -0
  411. vendor/aws/aws-sdk-php/.changes/3.40.0 +27 -0
  412. vendor/aws/aws-sdk-php/.changes/3.41.0 +47 -0
  413. vendor/aws/aws-sdk-php/.changes/3.42.0 +77 -0
  414. vendor/aws/aws-sdk-php/.changes/3.43.0 +37 -0
  415. vendor/aws/aws-sdk-php/.changes/3.44.0 +32 -0
  416. vendor/aws/aws-sdk-php/.changes/3.44.1 +7 -0
  417. vendor/aws/aws-sdk-php/.changes/3.44.2 +12 -0
  418. vendor/aws/aws-sdk-php/.changes/3.45.0 +27 -0
  419. vendor/aws/aws-sdk-php/.changes/3.45.1 +17 -0
  420. vendor/aws/aws-sdk-php/.changes/3.45.2 +12 -0
  421. vendor/aws/aws-sdk-php/.changes/3.45.3 +17 -0
  422. vendor/aws/aws-sdk-php/.changes/3.46.0 +27 -0
  423. vendor/aws/aws-sdk-php/.changes/3.47.0 +12 -0
  424. vendor/aws/aws-sdk-php/.changes/3.47.1 +12 -0
  425. vendor/aws/aws-sdk-php/.changes/3.48.0 +17 -0
  426. vendor/aws/aws-sdk-php/.changes/3.48.1 +12 -0
  427. vendor/aws/aws-sdk-php/.changes/3.48.10 +7 -0
  428. vendor/aws/aws-sdk-php/.changes/3.48.11 +7 -0
  429. vendor/aws/aws-sdk-php/.changes/3.48.12 +27 -0
  430. vendor/aws/aws-sdk-php/.changes/3.48.13 +7 -0
  431. vendor/aws/aws-sdk-php/.changes/3.48.14 +7 -0
  432. vendor/aws/aws-sdk-php/.changes/3.48.2 +22 -0
  433. vendor/aws/aws-sdk-php/.changes/3.48.3 +17 -0
  434. vendor/aws/aws-sdk-php/.changes/3.48.4 +17 -0
  435. vendor/aws/aws-sdk-php/.changes/3.48.5 +27 -0
  436. vendor/aws/aws-sdk-php/.changes/3.48.6 +17 -0
  437. vendor/aws/aws-sdk-php/.changes/3.48.7 +12 -0
  438. vendor/aws/aws-sdk-php/.changes/3.48.8 +17 -0
  439. vendor/aws/aws-sdk-php/.changes/3.48.9 +17 -0
  440. vendor/aws/aws-sdk-php/.changes/3.49.0 +22 -0
  441. vendor/aws/aws-sdk-php/.changes/3.49.1 +12 -0
  442. vendor/aws/aws-sdk-php/.changes/3.50.0 +17 -0
  443. vendor/aws/aws-sdk-php/.changes/3.51.0 +17 -0
  444. vendor/aws/aws-sdk-php/.changes/3.52.0 +17 -0
  445. vendor/aws/aws-sdk-php/.changes/3.52.1 +37 -0
  446. vendor/aws/aws-sdk-php/.changes/3.52.10 +17 -0
  447. vendor/aws/aws-sdk-php/.changes/3.52.11 +7 -0
  448. vendor/aws/aws-sdk-php/.changes/3.52.12 +7 -0
  449. vendor/aws/aws-sdk-php/.changes/3.52.13 +17 -0
  450. vendor/aws/aws-sdk-php/.changes/3.52.14 +22 -0
  451. vendor/aws/aws-sdk-php/.changes/3.52.15 +12 -0
  452. vendor/aws/aws-sdk-php/.changes/3.52.16 +7 -0
  453. vendor/aws/aws-sdk-php/.changes/3.52.17 +12 -0
  454. vendor/aws/aws-sdk-php/.changes/3.52.18 +7 -0
  455. vendor/aws/aws-sdk-php/.changes/3.52.19 +12 -0
  456. vendor/aws/aws-sdk-php/.changes/3.52.2 +17 -0
  457. vendor/aws/aws-sdk-php/.changes/3.52.20 +27 -0
  458. vendor/aws/aws-sdk-php/.changes/3.52.21 +17 -0
  459. vendor/aws/aws-sdk-php/.changes/3.52.22 +12 -0
  460. vendor/aws/aws-sdk-php/.changes/3.52.23 +22 -0
  461. vendor/aws/aws-sdk-php/.changes/3.52.24 +22 -0
  462. vendor/aws/aws-sdk-php/.changes/3.52.25 +7 -0
  463. vendor/aws/aws-sdk-php/.changes/3.52.26 +7 -0
  464. vendor/aws/aws-sdk-php/.changes/3.52.27 +17 -0
  465. vendor/aws/aws-sdk-php/.changes/3.52.28 +7 -0
  466. vendor/aws/aws-sdk-php/.changes/3.52.29 +37 -0
  467. vendor/aws/aws-sdk-php/.changes/3.52.3 +22 -0
  468. vendor/aws/aws-sdk-php/.changes/3.52.30 +12 -0
  469. vendor/aws/aws-sdk-php/.changes/3.52.31 +17 -0
  470. vendor/aws/aws-sdk-php/.changes/3.52.32 +7 -0
  471. vendor/aws/aws-sdk-php/.changes/3.52.33 +7 -0
  472. vendor/aws/aws-sdk-php/.changes/3.52.34 +7 -0
  473. vendor/aws/aws-sdk-php/.changes/3.52.35 +27 -0
  474. vendor/aws/aws-sdk-php/.changes/3.52.36 +22 -0
  475. vendor/aws/aws-sdk-php/.changes/3.52.4 +22 -0
  476. vendor/aws/aws-sdk-php/.changes/3.52.5 +47 -0
  477. vendor/aws/aws-sdk-php/.changes/3.52.6 +17 -0
  478. vendor/aws/aws-sdk-php/.changes/3.52.7 +27 -0
  479. vendor/aws/aws-sdk-php/.changes/3.52.8 +12 -0
  480. vendor/aws/aws-sdk-php/.changes/3.52.9 +12 -0
  481. vendor/aws/aws-sdk-php/.changes/3.53.0 +17 -0
  482. vendor/aws/aws-sdk-php/.changes/3.53.1 +17 -0
  483. vendor/aws/aws-sdk-php/.changes/3.53.2 +17 -0
  484. vendor/aws/aws-sdk-php/.changes/3.54.0 +47 -0
  485. vendor/aws/aws-sdk-php/.changes/3.54.1 +7 -0
  486. vendor/aws/aws-sdk-php/.changes/3.54.2 +7 -0
  487. vendor/aws/aws-sdk-php/.changes/3.54.3 +7 -0
  488. vendor/aws/aws-sdk-php/.changes/3.54.4 +27 -0
  489. vendor/aws/aws-sdk-php/.changes/3.54.5 +42 -0
  490. vendor/aws/aws-sdk-php/.changes/3.54.6 +12 -0
  491. vendor/aws/aws-sdk-php/.changes/3.55.0 +17 -0
  492. vendor/aws/aws-sdk-php/.changes/3.55.1 +17 -0
  493. vendor/aws/aws-sdk-php/.changes/3.55.10 +22 -0
  494. vendor/aws/aws-sdk-php/.changes/3.55.11 +7 -0
  495. vendor/aws/aws-sdk-php/.changes/3.55.12 +7 -0
  496. vendor/aws/aws-sdk-php/.changes/3.55.2 +17 -0
  497. vendor/aws/aws-sdk-php/.changes/3.55.3 +17 -0
  498. vendor/aws/aws-sdk-php/.changes/3.55.4 +32 -0
  499. vendor/aws/aws-sdk-php/.changes/3.55.5 +27 -0
  500. vendor/aws/aws-sdk-php/.changes/3.55.6 +27 -0
  501. vendor/aws/aws-sdk-php/.changes/3.55.7 +7 -0
  502. vendor/aws/aws-sdk-php/.changes/3.55.8 +22 -0
  503. vendor/aws/aws-sdk-php/.changes/3.55.9 +17 -0
  504. vendor/aws/aws-sdk-php/.changes/3.56.0 +22 -0
  505. vendor/aws/aws-sdk-php/.changes/3.56.1 +7 -0
  506. vendor/aws/aws-sdk-php/.changes/3.56.2 +12 -0
  507. vendor/aws/aws-sdk-php/.changes/3.56.3 +17 -0
  508. vendor/aws/aws-sdk-php/.changes/3.56.4 +12 -0
  509. vendor/aws/aws-sdk-php/.changes/3.56.5 +7 -0
  510. vendor/aws/aws-sdk-php/.changes/3.56.6 +5 -0
.github/ISSUE_TEMPLATE/pre-release-testing.md ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ name: Pre-release testing
3
+ about: Use this checklist template when all issues for a milestone are complete.
4
+ title: ''
5
+ labels: testing
6
+ assignees: jimiero
7
+
8
+ ---
9
+
10
+ - [ ] Basic Settings can be saved
11
+ - [ ] Remote Storages settings can be saved and can be validated against valid credentials (spot-test with existing cloud credentials from LastPass)
12
+ - [ ] Generate Backup - full backup with default settings
13
+ - [ ] Generate Backup - partial backup with some tables excluded
14
+ - [ ] Generate Backup - partial backup with some files excludes
15
+ - [ ] Generate Backup - partial backup with additional databases included
16
+ - [ ] Generate Backup - full backup with encryption enabled
17
+ - [ ] Generate Backup - full backup transferred to Dropbox
18
+ - [ ] Generate Backup - full backup transferred to Dropbox and deleted from local
19
+ - [ ] Manage Local Backups - Make sure backups are listed.
20
+ - [ ] Manage Local Backups - Make sure backups can be deleted
21
+ - [ ] Manage Local Backups - Make sure backups can be uploaded to DropBox
22
+ - [ ] Manage Local Backups - Make sure backups can be downloaded.
23
+ - [ ] Manage Local Backups - Make sure backup contents can be listed.
24
+ - [ ] Manage Local Backups - Make sure an encrypted backup can be unencrypted.
25
+ - [ ] Manage Dropbox Backups - Make sure backups are listed.
26
+ - [ ] Manage Dropbox Backups - Make sure backups can be deleted
27
+ - [ ] Manage Dropbox Backups - Make sure backups can be uploaded to DropBox
28
+ - [ ] Manage Dropbox Backups - Make sure backups can be downloaded.
29
+ - [ ] Manage Dropbox Backups - Make sure backup contents can be listed.
30
+ - [ ] Manage Dropbox Backups - Make sure an encrypted backup can be unencrypted.
31
+ - [ ] Create a Scheduled Profile
32
+ - [ ] Check the correct recurrence of a scheduled Profile based on the Wordpress cronjob execution
33
+ - [ ] Trigger any backup profile from the XCloner CLI
34
+ - [ ] Restore full backup locally
35
+ - [ ] Restore full backup to a remote location
36
+ - [ ] Enable/Disable logs - check if enabling/disabling logs in XCloner works
CHANGELOG.md CHANGED
@@ -2,7 +2,30 @@
2
 
3
  ## [Unreleased](https://github.com/watchfulli/XCloner-Wordpress/tree/HEAD)
4
 
5
- [Full Changelog](https://github.com/watchfulli/XCloner-Wordpress/compare/4.1.5...HEAD)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  **Implemented enhancements:**
8
 
@@ -27,12 +50,15 @@
27
  **Closed issues:**
28
 
29
  - Rename `Cleanup by Date\(days\)` [\#85](https://github.com/watchfulli/XCloner-Wordpress/issues/85)
30
- - Add `Local Storage` to the `Remote Storage` area? [\#81](https://github.com/watchfulli/XCloner-Wordpress/issues/81)
31
  - Bug selecting the time in the `schedule backup` tab [\#80](https://github.com/watchfulli/XCloner-Wordpress/issues/80)
32
  - Update Remote Storage names [\#77](https://github.com/watchfulli/XCloner-Wordpress/issues/77)
33
  - Small JS bug in Manage Backups interface [\#68](https://github.com/watchfulli/XCloner-Wordpress/issues/68)
34
  - New settings option: delete remote file when deleting backup [\#66](https://github.com/watchfulli/XCloner-Wordpress/issues/66)
35
 
 
 
 
 
36
  ## [4.1.5](https://github.com/watchfulli/XCloner-Wordpress/tree/4.1.5) (2020-05-14)
37
 
38
  [Full Changelog](https://github.com/watchfulli/XCloner-Wordpress/compare/4.1.4...4.1.5)
2
 
3
  ## [Unreleased](https://github.com/watchfulli/XCloner-Wordpress/tree/HEAD)
4
 
5
+ [Full Changelog](https://github.com/watchfulli/XCloner-Wordpress/compare/4.2.0...HEAD)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - Remove links in changelog for 4.2.0 release [\#101](https://github.com/watchfulli/XCloner-Wordpress/issues/101)
10
+ - Rename `Scheduled Backups` menu to `Schedules & Profiles` [\#98](https://github.com/watchfulli/XCloner-Wordpress/issues/98)
11
+ - Exclude `docs` folder from releases [\#63](https://github.com/watchfulli/XCloner-Wordpress/issues/63)
12
+
13
+ **Fixed bugs:**
14
+
15
+ - Fixed `redeclare deactivate\_plugin` bug in CLI [\#96](https://github.com/watchfulli/XCloner-Wordpress/issues/96)
16
+
17
+ **Closed issues:**
18
+
19
+ - Move xcloner library to a separate repo: `XCloner\_core` [\#97](https://github.com/watchfulli/XCloner-Wordpress/issues/97)
20
+ - Integrate standalone library into Wordpress plugin [\#95](https://github.com/watchfulli/XCloner-Wordpress/issues/95)
21
+
22
+ **Merged pull requests:**
23
+
24
+ - Milestone4.2.0 [\#94](https://github.com/watchfulli/XCloner-Wordpress/pull/94) ([ovidiul](https://github.com/ovidiul))
25
+
26
+ ## [4.2.0](https://github.com/watchfulli/XCloner-Wordpress/tree/4.2.0) (2020-06-01)
27
+
28
+ [Full Changelog](https://github.com/watchfulli/XCloner-Wordpress/compare/4.1.5...4.2.0)
29
 
30
  **Implemented enhancements:**
31
 
50
  **Closed issues:**
51
 
52
  - Rename `Cleanup by Date\(days\)` [\#85](https://github.com/watchfulli/XCloner-Wordpress/issues/85)
 
53
  - Bug selecting the time in the `schedule backup` tab [\#80](https://github.com/watchfulli/XCloner-Wordpress/issues/80)
54
  - Update Remote Storage names [\#77](https://github.com/watchfulli/XCloner-Wordpress/issues/77)
55
  - Small JS bug in Manage Backups interface [\#68](https://github.com/watchfulli/XCloner-Wordpress/issues/68)
56
  - New settings option: delete remote file when deleting backup [\#66](https://github.com/watchfulli/XCloner-Wordpress/issues/66)
57
 
58
+ **Merged pull requests:**
59
+
60
+ - Milestone4.2.0 [\#93](https://github.com/watchfulli/XCloner-Wordpress/pull/93) ([ovidiul](https://github.com/ovidiul))
61
+
62
  ## [4.1.5](https://github.com/watchfulli/XCloner-Wordpress/tree/4.1.5) (2020-05-14)
63
 
64
  [Full Changelog](https://github.com/watchfulli/XCloner-Wordpress/compare/4.1.4...4.1.5)
README.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://www.xcloner.com
4
  Tags: backup, database backup, cloud backup, WordPress backup, WordPress migration
5
  Requires at least: 3.0.1
6
  Tested up to: 5.4
7
- Stable tag: 4.2.0
8
 
9
  XCloner is a backup plugin that allows you to safely back up and restore your WordPress sites. You can send site backups to SFTP, Dropbox, Amazon, Google Drive, Backblaze and other locations.
10
 
@@ -115,27 +115,35 @@ Of course, schedules can be adjusted accordingly to how often you update your si
115
 
116
  == Changelog ==
117
 
 
 
 
 
 
 
 
 
118
  * 4.2.0 *
119
 
120
  ** Implemented enhancements: **
121
 
122
- * Improve error when connecting to remote site using restore script from another site [\#89](https://github.com/watchfulli/XCloner-Wordpress/issues/89)
123
- * Improve error message when accessing restore script directly [\#86](https://github.com/watchfulli/XCloner-Wordpress/issues/86)
124
- * Encrypt database password during restore [\#84](https://github.com/watchfulli/XCloner-Wordpress/issues/84)
125
- * Update default regex exclusions [\#78](https://github.com/watchfulli/XCloner-Wordpress/issues/78)
126
- * Replace youtube links [\#76](https://github.com/watchfulli/XCloner-Wordpress/issues/76)
127
- * Add additional cleanup & quota options for backup storage [\#61](https://github.com/watchfulli/XCloner-Wordpress/issues/61)
128
- * Add standalone CLI for making backups [\#60](https://github.com/watchfulli/XCloner-Wordpress/issues/60)
129
- * Move `send to remote destination` option to the `Backup Options` tab [\#56](https://github.com/watchfulli/XCloner-Wordpress/issues/56)
130
 
131
  ** Fixed bugs: **
132
 
133
- * Select All Backups delete does not work [\#92](https://github.com/watchfulli/XCloner-Wordpress/issues/92)
134
- * JS Error during restoration [\#91](https://github.com/watchfulli/XCloner-Wordpress/issues/91)
135
- * Ajax error when viewing empty storage area [\#79](https://github.com/watchfulli/XCloner-Wordpress/issues/79)
136
- * Javascript error when running a backup, and clicking "Send Backup to remote storage" [\#74](https://github.com/watchfulli/XCloner-Wordpress/issues/74)
137
- * SFTP bug [\#72](https://github.com/watchfulli/XCloner-Wordpress/issues/72)
138
- * Live DB restore replaces WP Options table [\#69](https://github.com/watchfulli/XCloner-Wordpress/issues/69)
139
 
140
  = 4.1.5 =
141
  * SFTP upoad fix
4
  Tags: backup, database backup, cloud backup, WordPress backup, WordPress migration
5
  Requires at least: 3.0.1
6
  Tested up to: 5.4
7
+ Stable tag: 4.2.1
8
 
9
  XCloner is a backup plugin that allows you to safely back up and restore your WordPress sites. You can send site backups to SFTP, Dropbox, Amazon, Google Drive, Backblaze and other locations.
10
 
115
 
116
  == Changelog ==
117
 
118
+
119
+ * 4.2.1 *
120
+
121
+ ** Implemented enhancements: **
122
+ * Rename `Scheduled Backups` menu to `Schedules & Profiles`
123
+ ** Fixed bugs: **
124
+ * Fixed `redeclare deactivate\_plugin` bug in CLI
125
+
126
  * 4.2.0 *
127
 
128
  ** Implemented enhancements: **
129
 
130
+ * Improve error when connecting to remote site using restore script from another site
131
+ * Improve error message when accessing restore script directly
132
+ * Encrypt database password during restore
133
+ * Update default regex exclusions
134
+ * Replace youtube links
135
+ * Add additional cleanup & quota options for backup storage
136
+ * Add standalone CLI for making backups
137
+ * Move `send to remote destination` option to the `Backup Options` tab
138
 
139
  ** Fixed bugs: **
140
 
141
+ * Select All Backups delete does not work
142
+ * JS Error during restoration
143
+ * Ajax error when viewing empty storage area
144
+ * Javascript error when running a backup, and clicking "Send Backup to remote storage"
145
+ * SFTP bug
146
+ * Live DB restore replaces WP Options table
147
 
148
  = 4.1.5 =
149
  * SFTP upoad fix
admin/class-xcloner-admin.php CHANGED
@@ -51,7 +51,7 @@ class Xcloner_Admin {
51
  * Xcloner_Admin constructor.
52
  * @param Xcloner $xcloner_container
53
  */
54
- public function __construct(Xcloner $xcloner_container) {
55
 
56
  $this->plugin_name = $xcloner_container->get_plugin_name();
57
  $this->version = $xcloner_container->get_version();
51
  * Xcloner_Admin constructor.
52
  * @param Xcloner $xcloner_container
53
  */
54
+ public function __construct(watchfulli\XClonerCore\Xcloner $xcloner_container) {
55
 
56
  $this->plugin_name = $xcloner_container->get_plugin_name();
57
  $this->version = $xcloner_container->get_version();
admin/css/xcloner-admin.css CHANGED
@@ -314,6 +314,7 @@ a.expand-multipart.remove {
314
 
315
  .xcloner-restore ul.text-steps li {
316
  list-style-type: decimal;
 
317
  }
318
 
319
  .xcloner-restore ul.text-steps li.warning {
@@ -329,7 +330,7 @@ a.expand-multipart.remove {
329
  }
330
 
331
  .xcloner-restore ul.text-steps {
332
- margin-left: 20px;
333
  }
334
 
335
  .xcloner-restore .restore-remote-backup-step .files-list {
314
 
315
  .xcloner-restore ul.text-steps li {
316
  list-style-type: decimal;
317
+ padding:5px 0px;
318
  }
319
 
320
  .xcloner-restore ul.text-steps li.warning {
330
  }
331
 
332
  .xcloner-restore ul.text-steps {
333
+ margin-left: 50px;
334
  }
335
 
336
  .xcloner-restore .restore-remote-backup-step .files-list {
admin/partials/xcloner_restore_page.php CHANGED
@@ -27,11 +27,15 @@ $backup_list = $xcloner_file_system->get_latest_backups();
27
  <div class="collapsible-body row">
28
 
29
  <ul class="text-steps">
30
- <li><?php echo __("If you want to do a <strong>Local Target System Restore</strong>, leave Url field below empty and click 'Check Connection', you can skip the next steps.", 'xcloner-backup-and-restore') ?>
31
  </li>
32
- <li><?php echo __("If you want to do a <strong>Remote Target System Restore</strong>, please download the restore script from", 'xcloner-backup-and-restore') ?>
33
- <a href='#'
34
- onclick="window.location=ajaxurl+'?action=download_restore_script&phar=true'"><strong><?php echo __("here", 'xcloner-backup-and-restore') ?></strong></a>
 
 
 
 
35
  </li>
36
  <li>
37
  <?php echo __("Extract the restore script archive files on your new host", 'xcloner-backup-and-restore') ?>
@@ -385,11 +389,11 @@ $backup_list = $xcloner_file_system->get_latest_backups();
385
  <div class="collapsible-header"><i
386
  class="material-icons">folder_open</i><?php echo __("Finishing up...", 'xcloner-backup-and-restore') ?>
387
  </div>
388
- <div class="collapsible-body row">
389
 
390
  <div class="row">
391
  <div class="col s4">
392
- <label><?php echo __("Update wp-config.php mysql details and update the Target Site Url", 'xcloner-backup-and-restore') ?></label>
393
  </div>
394
 
395
  <div class="col s8">
@@ -407,7 +411,7 @@ $backup_list = $xcloner_file_system->get_latest_backups();
407
 
408
  <div class="row">
409
  <div class="col s4">
410
- <label><?php echo __("Delete Restored Backup Temporary Folder", 'xcloner-backup-and-restore') ?></label>
411
  </div>
412
  <div class="col s8">
413
  <div class="switch">
@@ -424,7 +428,7 @@ $backup_list = $xcloner_file_system->get_latest_backups();
424
 
425
  <div class="row">
426
  <div class="col s4">
427
- <label><?php echo __("Delete Restore Script", 'xcloner-backup-and-restore') ?></label>
428
  </div>
429
  <div class="col s8">
430
  <div class="switch">
27
  <div class="collapsible-body row">
28
 
29
  <ul class="text-steps">
30
+ <li><?php echo __("If you want to do a <strong>Local Target System Restore</strong>, leave Url field below empty and click 'Check Connection' button, next steps can be skipped.", 'xcloner-backup-and-restore') ?>
31
  </li>
32
+ <li><?php echo __("If you want to do a <strong>Remote Target System Restore</strong>, please ", 'xcloner-backup-and-restore') ?>
33
+
34
+ <button class="btn waves-effect waves-light" type="submit"
35
+ onclick="window.location=ajaxurl+'?action=download_restore_script&phar=true'">
36
+ <?php echo __("download the restore script", 'xcloner-backup-and-restore') ?>
37
+ </button>
38
+
39
  </li>
40
  <li>
41
  <?php echo __("Extract the restore script archive files on your new host", 'xcloner-backup-and-restore') ?>
389
  <div class="collapsible-header"><i
390
  class="material-icons">folder_open</i><?php echo __("Finishing up...", 'xcloner-backup-and-restore') ?>
391
  </div>
392
+ <div class="collapsible-body row" style="padding-left:40px;">
393
 
394
  <div class="row">
395
  <div class="col s4">
396
+ <span><?php echo __("Update wp-config.php mysql details and update the Target Site Url", 'xcloner-backup-and-restore') ?></span>
397
  </div>
398
 
399
  <div class="col s8">
411
 
412
  <div class="row">
413
  <div class="col s4">
414
+ <span><?php echo __("Delete Restored Backup Temporary Folder", 'xcloner-backup-and-restore') ?></span>
415
  </div>
416
  <div class="col s8">
417
  <div class="switch">
428
 
429
  <div class="row">
430
  <div class="col s4">
431
+ <span><?php echo __("Delete Restore Script", 'xcloner-backup-and-restore') ?></span>
432
  </div>
433
  <div class="col s8">
434
  <div class="switch">
admin/partials/xcloner_scheduled_backups_page.php CHANGED
@@ -22,7 +22,7 @@ $available_storages = $xcloner_remote_storage->get_available_storages();
22
  <thead>
23
  <tr class="grey lighten-2">
24
  <th><?php echo __('ID', 'xcloner-backup-and-restore') ?></th>
25
- <th><?php echo __('Schedule Name', 'xcloner-backup-and-restore') ?></th>
26
  <th><?php echo __('Recurrence', 'xcloner-backup-and-restore') ?></th>
27
  <th class="hide-on-med-and-down"><?php echo __('Next Execution', 'xcloner-backup-and-restore') ?></th>
28
  <th><?php echo __('Remote Storage', 'xcloner-backup-and-restore') ?></th>
22
  <thead>
23
  <tr class="grey lighten-2">
24
  <th><?php echo __('ID', 'xcloner-backup-and-restore') ?></th>
25
+ <th><?php echo __('Profile Name', 'xcloner-backup-and-restore') ?></th>
26
  <th><?php echo __('Recurrence', 'xcloner-backup-and-restore') ?></th>
27
  <th class="hide-on-med-and-down"><?php echo __('Next Execution', 'xcloner-backup-and-restore') ?></th>
28
  <th><?php echo __('Remote Storage', 'xcloner-backup-and-restore') ?></th>
composer.json CHANGED
@@ -1,5 +1,6 @@
1
  {
2
  "require": {
 
3
  "splitbrain/php-archive": "^1.0",
4
  "vakata/jstree": "^3.3",
5
  "league/flysystem": "^1.0",
1
  {
2
  "require": {
3
+ "watchfulli/xcloner-core": "dev-master",
4
  "splitbrain/php-archive": "^1.0",
5
  "vakata/jstree": "^3.3",
6
  "league/flysystem": "^1.0",
composer.lock CHANGED
@@ -4,31 +4,30 @@
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": "59f6f2441b9d1bfe2625a5ff6f6b8414",
8
  "packages": [
9
  {
10
  "name": "aws/aws-sdk-php",
11
- "version": "3.56.5",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/aws/aws-sdk-php.git",
15
- "reference": "d5b8f10a6e51174fab6a0222e1f0dfae2323e75d"
16
  },
17
  "dist": {
18
  "type": "zip",
19
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d5b8f10a6e51174fab6a0222e1f0dfae2323e75d",
20
- "reference": "d5b8f10a6e51174fab6a0222e1f0dfae2323e75d",
21
  "shasum": ""
22
  },
23
  "require": {
24
  "ext-json": "*",
25
  "ext-pcre": "*",
26
  "ext-simplexml": "*",
27
- "ext-spl": "*",
28
- "guzzlehttp/guzzle": "^5.3.1|^6.2.1",
29
- "guzzlehttp/promises": "~1.0",
30
  "guzzlehttp/psr7": "^1.4.1",
31
- "mtdowling/jmespath.php": "~2.2",
32
  "php": ">=5.5"
33
  },
34
  "require-dev": {
@@ -38,15 +37,20 @@
38
  "doctrine/cache": "~1.4",
39
  "ext-dom": "*",
40
  "ext-openssl": "*",
 
 
41
  "nette/neon": "^2.3",
42
  "phpunit/phpunit": "^4.8.35|^5.4.3",
43
- "psr/cache": "^1.0"
 
 
44
  },
45
  "suggest": {
46
  "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
47
  "doctrine/cache": "To use the DoctrineCacheAdapter",
48
  "ext-curl": "To send requests using cURL",
49
- "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages"
 
50
  },
51
  "type": "library",
52
  "extra": {
@@ -84,20 +88,20 @@
84
  "s3",
85
  "sdk"
86
  ],
87
- "time": "2018-05-21T20:15:18+00:00"
88
  },
89
  {
90
  "name": "components/jquery",
91
- "version": "3.3.1",
92
  "source": {
93
  "type": "git",
94
  "url": "https://github.com/components/jquery.git",
95
- "reference": "459648cda77875519c5da3ae1dd0ed5d170aa649"
96
  },
97
  "dist": {
98
  "type": "zip",
99
- "url": "https://api.github.com/repos/components/jquery/zipball/459648cda77875519c5da3ae1dd0ed5d170aa649",
100
- "reference": "459648cda77875519c5da3ae1dd0ed5d170aa649",
101
  "shasum": ""
102
  },
103
  "type": "component",
@@ -126,25 +130,26 @@
126
  ],
127
  "description": "jQuery JavaScript Library",
128
  "homepage": "http://jquery.com",
129
- "time": "2018-03-04T13:23:48+00:00"
130
  },
131
  {
132
  "name": "gliterd/backblaze-b2",
133
- "version": "1.0.4",
134
  "source": {
135
  "type": "git",
136
  "url": "https://github.com/gliterd/backblaze-b2.git",
137
- "reference": "5427b10b93b0ba24f06f80623b502c7d1d7fcd72"
138
  },
139
  "dist": {
140
  "type": "zip",
141
- "url": "https://api.github.com/repos/gliterd/backblaze-b2/zipball/5427b10b93b0ba24f06f80623b502c7d1d7fcd72",
142
- "reference": "5427b10b93b0ba24f06f80623b502c7d1d7fcd72",
143
  "shasum": ""
144
  },
145
  "require": {
146
  "guzzlehttp/guzzle": "^6.1",
147
- "php": ">=5.5.0"
 
148
  },
149
  "require-dev": {
150
  "phpunit/phpunit": "4.8.*",
@@ -180,27 +185,28 @@
180
  "filesystem",
181
  "storage"
182
  ],
183
- "time": "2018-07-03T11:52:32+00:00"
184
  },
185
  {
186
  "name": "guzzlehttp/guzzle",
187
- "version": "6.5.0",
188
  "source": {
189
  "type": "git",
190
  "url": "https://github.com/guzzle/guzzle.git",
191
- "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5"
192
  },
193
  "dist": {
194
  "type": "zip",
195
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
196
- "reference": "dbc2bc3a293ed6b1ae08a3651e2bfd213d19b6a5",
197
  "shasum": ""
198
  },
199
  "require": {
200
  "ext-json": "*",
201
  "guzzlehttp/promises": "^1.0",
202
  "guzzlehttp/psr7": "^1.6.1",
203
- "php": ">=5.5"
 
204
  },
205
  "require-dev": {
206
  "ext-curl": "*",
@@ -208,7 +214,6 @@
208
  "psr/log": "^1.1"
209
  },
210
  "suggest": {
211
- "ext-intl": "Required for Internationalized Domain Name (IDN) support",
212
  "psr/log": "Required for using the Log middleware"
213
  },
214
  "type": "library",
@@ -247,7 +252,7 @@
247
  "rest",
248
  "web service"
249
  ],
250
- "time": "2019-12-07T18:20:45+00:00"
251
  },
252
  {
253
  "name": "guzzlehttp/promises",
@@ -371,18 +376,63 @@
371
  ],
372
  "time": "2019-07-01T23:21:34+00:00"
373
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
374
  {
375
  "name": "league/flysystem",
376
- "version": "1.0.49",
377
  "source": {
378
  "type": "git",
379
  "url": "https://github.com/thephpleague/flysystem.git",
380
- "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd"
381
  },
382
  "dist": {
383
  "type": "zip",
384
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd",
385
- "reference": "a63cc83d8a931b271be45148fa39ba7156782ffd",
386
  "shasum": ""
387
  },
388
  "require": {
@@ -394,7 +444,7 @@
394
  },
395
  "require-dev": {
396
  "phpspec/phpspec": "^3.4",
397
- "phpunit/phpunit": "^5.7.10"
398
  },
399
  "suggest": {
400
  "ext-fileinfo": "Required for MimeType",
@@ -453,20 +503,20 @@
453
  "sftp",
454
  "storage"
455
  ],
456
- "time": "2018-11-23T23:41:29+00:00"
457
  },
458
  {
459
  "name": "league/flysystem-aws-s3-v3",
460
- "version": "1.0.19",
461
  "source": {
462
  "type": "git",
463
  "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
464
- "reference": "f135691ef6761542af301b7c9880f140fb12dc74"
465
  },
466
  "dist": {
467
  "type": "zip",
468
- "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/f135691ef6761542af301b7c9880f140fb12dc74",
469
- "reference": "f135691ef6761542af301b7c9880f140fb12dc74",
470
  "shasum": ""
471
  },
472
  "require": {
@@ -500,7 +550,7 @@
500
  }
501
  ],
502
  "description": "Flysystem adapter for the AWS S3 SDK v3.x",
503
- "time": "2018-03-27T20:33:59+00:00"
504
  },
505
  {
506
  "name": "league/flysystem-azure-blob-storage",
@@ -545,16 +595,16 @@
545
  },
546
  {
547
  "name": "league/flysystem-sftp",
548
- "version": "1.0.18",
549
  "source": {
550
  "type": "git",
551
  "url": "https://github.com/thephpleague/flysystem-sftp.git",
552
- "reference": "61bc5a6ade892b5ac81e62b8c21be2c1798acc2a"
553
  },
554
  "dist": {
555
  "type": "zip",
556
- "url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/61bc5a6ade892b5ac81e62b8c21be2c1798acc2a",
557
- "reference": "61bc5a6ade892b5ac81e62b8c21be2c1798acc2a",
558
  "shasum": ""
559
  },
560
  "require": {
@@ -583,30 +633,30 @@
583
  }
584
  ],
585
  "description": "Flysystem adapter for SFTP",
586
- "time": "2019-01-07T11:56:21+00:00"
587
  },
588
  {
589
  "name": "league/flysystem-webdav",
590
- "version": "1.0.5",
591
  "source": {
592
  "type": "git",
593
  "url": "https://github.com/thephpleague/flysystem-webdav.git",
594
- "reference": "5fb6f5a45e5f2a5519a26032d98ad7d7c65f81d7"
595
  },
596
  "dist": {
597
  "type": "zip",
598
- "url": "https://api.github.com/repos/thephpleague/flysystem-webdav/zipball/5fb6f5a45e5f2a5519a26032d98ad7d7c65f81d7",
599
- "reference": "5fb6f5a45e5f2a5519a26032d98ad7d7c65f81d7",
600
  "shasum": ""
601
  },
602
  "require": {
603
  "league/flysystem": "~1.0",
604
- "php": ">=5.5.0",
605
- "sabre/dav": "~3.1"
606
  },
607
  "require-dev": {
608
- "mockery/mockery": "~0.9",
609
- "phpunit/phpunit": "~4.0"
610
  },
611
  "type": "library",
612
  "extra": {
@@ -630,27 +680,27 @@
630
  }
631
  ],
632
  "description": "Flysystem adapter for WebDAV",
633
- "time": "2016-12-14T11:28:55+00:00"
634
  },
635
  {
636
  "name": "mhetreramesh/flysystem-backblaze",
637
- "version": "1.1.4",
638
  "source": {
639
  "type": "git",
640
  "url": "https://github.com/gliterd/flysystem-backblaze.git",
641
- "reference": "bce0372dfe40baa1e16b54e93c3400a568059070"
642
  },
643
  "dist": {
644
  "type": "zip",
645
- "url": "https://api.github.com/repos/gliterd/flysystem-backblaze/zipball/bce0372dfe40baa1e16b54e93c3400a568059070",
646
- "reference": "bce0372dfe40baa1e16b54e93c3400a568059070",
647
  "shasum": ""
648
  },
649
  "require": {
650
  "gliterd/backblaze-b2": "*",
651
  "league/flysystem": "~1.0",
652
  "mikey179/vfsstream": "*",
653
- "php": ">=5.6.0",
654
  "psr/http-message-implementation": "*"
655
  },
656
  "require-dev": {
@@ -685,20 +735,20 @@
685
  "client",
686
  "filesystem"
687
  ],
688
- "time": "2018-06-29T12:06:41+00:00"
689
  },
690
  {
691
  "name": "microsoft/azure-storage-blob",
692
- "version": "1.4.0",
693
  "source": {
694
  "type": "git",
695
  "url": "https://github.com/Azure/azure-storage-blob-php.git",
696
- "reference": "8310c2ecab488fa325db3dcf2f8723bbcfe58941"
697
  },
698
  "dist": {
699
  "type": "zip",
700
- "url": "https://api.github.com/repos/Azure/azure-storage-blob-php/zipball/8310c2ecab488fa325db3dcf2f8723bbcfe58941",
701
- "reference": "8310c2ecab488fa325db3dcf2f8723bbcfe58941",
702
  "shasum": ""
703
  },
704
  "require": {
@@ -729,20 +779,20 @@
729
  "sdk",
730
  "storage"
731
  ],
732
- "time": "2019-04-26T15:06:52+00:00"
733
  },
734
  {
735
  "name": "microsoft/azure-storage-common",
736
- "version": "1.4.0",
737
  "source": {
738
  "type": "git",
739
  "url": "https://github.com/Azure/azure-storage-common-php.git",
740
- "reference": "435adf4d09f0b34375f899b5627d2926bfe317e6"
741
  },
742
  "dist": {
743
  "type": "zip",
744
- "url": "https://api.github.com/repos/Azure/azure-storage-common-php/zipball/435adf4d09f0b34375f899b5627d2926bfe317e6",
745
- "reference": "435adf4d09f0b34375f899b5627d2926bfe317e6",
746
  "shasum": ""
747
  },
748
  "require": {
@@ -773,7 +823,7 @@
773
  "sdk",
774
  "storage"
775
  ],
776
- "time": "2019-04-26T15:02:17+00:00"
777
  },
778
  {
779
  "name": "mikey179/vfsstream",
@@ -823,16 +873,16 @@
823
  },
824
  {
825
  "name": "monolog/monolog",
826
- "version": "1.23.0",
827
  "source": {
828
  "type": "git",
829
  "url": "https://github.com/Seldaek/monolog.git",
830
- "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4"
831
  },
832
  "dist": {
833
  "type": "zip",
834
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
835
- "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4",
836
  "shasum": ""
837
  },
838
  "require": {
@@ -846,11 +896,10 @@
846
  "aws/aws-sdk-php": "^2.4.9 || ^3.0",
847
  "doctrine/couchdb": "~1.0@dev",
848
  "graylog2/gelf-php": "~1.0",
849
- "jakub-onderka/php-parallel-lint": "0.9",
850
  "php-amqplib/php-amqplib": "~2.4",
851
  "php-console/php-console": "^3.1.3",
 
852
  "phpunit/phpunit": "~4.5",
853
- "phpunit/phpunit-mock-objects": "2.3.0",
854
  "ruflin/elastica": ">=0.90 <3.0",
855
  "sentry/sentry": "^0.13",
856
  "swiftmailer/swiftmailer": "^5.3|^6.0"
@@ -897,27 +946,29 @@
897
  "logging",
898
  "psr-3"
899
  ],
900
- "time": "2017-06-19T01:22:40+00:00"
901
  },
902
  {
903
  "name": "mtdowling/jmespath.php",
904
- "version": "2.4.0",
905
  "source": {
906
  "type": "git",
907
  "url": "https://github.com/jmespath/jmespath.php.git",
908
- "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac"
909
  },
910
  "dist": {
911
  "type": "zip",
912
- "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
913
- "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
914
  "shasum": ""
915
  },
916
  "require": {
917
- "php": ">=5.4.0"
 
918
  },
919
  "require-dev": {
920
- "phpunit/phpunit": "~4.0"
 
921
  },
922
  "bin": [
923
  "bin/jp.php"
@@ -925,7 +976,7 @@
925
  "type": "library",
926
  "extra": {
927
  "branch-alias": {
928
- "dev-master": "2.0-dev"
929
  }
930
  },
931
  "autoload": {
@@ -952,20 +1003,81 @@
952
  "json",
953
  "jsonpath"
954
  ],
955
- "time": "2016-12-03T22:08:25+00:00"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
956
  },
957
  {
958
  "name": "phpseclib/phpseclib",
959
- "version": "2.0.11",
960
  "source": {
961
  "type": "git",
962
  "url": "https://github.com/phpseclib/phpseclib.git",
963
- "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b"
964
  },
965
  "dist": {
966
  "type": "zip",
967
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b",
968
- "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b",
969
  "shasum": ""
970
  },
971
  "require": {
@@ -1044,7 +1156,7 @@
1044
  "x.509",
1045
  "x509"
1046
  ],
1047
- "time": "2018-04-15T16:55:05+00:00"
1048
  },
1049
  {
1050
  "name": "psr/http-message",
@@ -1098,16 +1210,16 @@
1098
  },
1099
  {
1100
  "name": "psr/log",
1101
- "version": "1.0.2",
1102
  "source": {
1103
  "type": "git",
1104
  "url": "https://github.com/php-fig/log.git",
1105
- "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
1106
  },
1107
  "dist": {
1108
  "type": "zip",
1109
- "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
1110
- "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
1111
  "shasum": ""
1112
  },
1113
  "require": {
@@ -1116,7 +1228,7 @@
1116
  "type": "library",
1117
  "extra": {
1118
  "branch-alias": {
1119
- "dev-master": "1.0.x-dev"
1120
  }
1121
  },
1122
  "autoload": {
@@ -1141,7 +1253,7 @@
1141
  "psr",
1142
  "psr-3"
1143
  ],
1144
- "time": "2016-10-10T12:19:37+00:00"
1145
  },
1146
  {
1147
  "name": "ralouphie/getallheaders",
@@ -1185,16 +1297,16 @@
1185
  },
1186
  {
1187
  "name": "sabre/dav",
1188
- "version": "3.2.3",
1189
  "source": {
1190
  "type": "git",
1191
  "url": "https://github.com/sabre-io/dav.git",
1192
- "reference": "a9780ce4f35560ecbd0af524ad32d9d2c8954b80"
1193
  },
1194
  "dist": {
1195
  "type": "zip",
1196
- "url": "https://api.github.com/repos/sabre-io/dav/zipball/a9780ce4f35560ecbd0af524ad32d9d2c8954b80",
1197
- "reference": "a9780ce4f35560ecbd0af524ad32d9d2c8954b80",
1198
  "shasum": ""
1199
  },
1200
  "require": {
@@ -1202,27 +1314,30 @@
1202
  "ext-date": "*",
1203
  "ext-dom": "*",
1204
  "ext-iconv": "*",
 
1205
  "ext-mbstring": "*",
1206
  "ext-pcre": "*",
1207
  "ext-simplexml": "*",
1208
  "ext-spl": "*",
1209
  "lib-libxml": ">=2.7.0",
1210
- "php": ">=5.5.0",
1211
  "psr/log": "^1.0",
1212
- "sabre/event": ">=2.0.0, <4.0.0",
1213
- "sabre/http": "^4.2.1",
1214
- "sabre/uri": "^1.0.1",
1215
- "sabre/vobject": "^4.1.0",
1216
- "sabre/xml": "^1.4.0"
1217
  },
1218
  "require-dev": {
1219
  "evert/phpdoc-md": "~0.1.0",
 
1220
  "monolog/monolog": "^1.18",
1221
- "phpunit/phpunit": "> 4.8, <6.0.0",
1222
- "sabre/cs": "^1.0.0"
1223
  },
1224
  "suggest": {
1225
  "ext-curl": "*",
 
1226
  "ext-pdo": "*"
1227
  },
1228
  "bin": [
@@ -1230,11 +1345,6 @@
1230
  "bin/naturalselection"
1231
  ],
1232
  "type": "library",
1233
- "extra": {
1234
- "branch-alias": {
1235
- "dev-master": "3.1.0-dev"
1236
- }
1237
- },
1238
  "autoload": {
1239
  "psr-4": {
1240
  "Sabre\\DAV\\": "lib/DAV/",
@@ -1264,28 +1374,28 @@
1264
  "framework",
1265
  "iCalendar"
1266
  ],
1267
- "time": "2018-10-19T09:58:27+00:00"
1268
  },
1269
  {
1270
  "name": "sabre/event",
1271
- "version": "3.0.0",
1272
  "source": {
1273
  "type": "git",
1274
  "url": "https://github.com/sabre-io/event.git",
1275
- "reference": "831d586f5a442dceacdcf5e9c4c36a4db99a3534"
1276
  },
1277
  "dist": {
1278
  "type": "zip",
1279
- "url": "https://api.github.com/repos/sabre-io/event/zipball/831d586f5a442dceacdcf5e9c4c36a4db99a3534",
1280
- "reference": "831d586f5a442dceacdcf5e9c4c36a4db99a3534",
1281
  "shasum": ""
1282
  },
1283
  "require": {
1284
- "php": ">=5.5"
1285
  },
1286
  "require-dev": {
1287
- "phpunit/phpunit": "*",
1288
- "sabre/cs": "~0.0.4"
1289
  },
1290
  "type": "library",
1291
  "autoload": {
@@ -1315,38 +1425,42 @@
1315
  "keywords": [
1316
  "EventEmitter",
1317
  "async",
 
 
1318
  "events",
1319
  "hooks",
1320
  "plugin",
1321
  "promise",
 
1322
  "signal"
1323
  ],
1324
- "time": "2015-11-05T20:14:39+00:00"
1325
  },
1326
  {
1327
  "name": "sabre/http",
1328
- "version": "v4.2.4",
1329
  "source": {
1330
  "type": "git",
1331
  "url": "https://github.com/sabre-io/http.git",
1332
- "reference": "acccec4ba863959b2d10c1fa0fb902736c5c8956"
1333
  },
1334
  "dist": {
1335
  "type": "zip",
1336
- "url": "https://api.github.com/repos/sabre-io/http/zipball/acccec4ba863959b2d10c1fa0fb902736c5c8956",
1337
- "reference": "acccec4ba863959b2d10c1fa0fb902736c5c8956",
1338
  "shasum": ""
1339
  },
1340
  "require": {
1341
  "ext-ctype": "*",
 
1342
  "ext-mbstring": "*",
1343
- "php": ">=5.4",
1344
- "sabre/event": ">=1.0.0,<4.0.0",
1345
- "sabre/uri": "~1.0"
1346
  },
1347
  "require-dev": {
1348
- "phpunit/phpunit": "~4.3",
1349
- "sabre/cs": "~0.0.1"
1350
  },
1351
  "suggest": {
1352
  "ext-curl": " to make http requests with the Client class"
@@ -1377,28 +1491,28 @@
1377
  "keywords": [
1378
  "http"
1379
  ],
1380
- "time": "2018-02-23T11:10:29+00:00"
1381
  },
1382
  {
1383
  "name": "sabre/uri",
1384
- "version": "1.2.1",
1385
  "source": {
1386
  "type": "git",
1387
  "url": "https://github.com/sabre-io/uri.git",
1388
- "reference": "ada354d83579565949d80b2e15593c2371225e61"
1389
  },
1390
  "dist": {
1391
  "type": "zip",
1392
- "url": "https://api.github.com/repos/sabre-io/uri/zipball/ada354d83579565949d80b2e15593c2371225e61",
1393
- "reference": "ada354d83579565949d80b2e15593c2371225e61",
1394
  "shasum": ""
1395
  },
1396
  "require": {
1397
- "php": ">=5.4.7"
1398
  },
1399
  "require-dev": {
1400
- "phpunit/phpunit": ">=4.0,<6.0",
1401
- "sabre/cs": "~1.0.0"
1402
  },
1403
  "type": "library",
1404
  "autoload": {
@@ -1428,29 +1542,30 @@
1428
  "uri",
1429
  "url"
1430
  ],
1431
- "time": "2017-02-20T19:59:28+00:00"
1432
  },
1433
  {
1434
  "name": "sabre/vobject",
1435
- "version": "4.2.0",
1436
  "source": {
1437
  "type": "git",
1438
  "url": "https://github.com/sabre-io/vobject.git",
1439
- "reference": "bd500019764e434ff65872d426f523e7882a0739"
1440
  },
1441
  "dist": {
1442
  "type": "zip",
1443
- "url": "https://api.github.com/repos/sabre-io/vobject/zipball/bd500019764e434ff65872d426f523e7882a0739",
1444
- "reference": "bd500019764e434ff65872d426f523e7882a0739",
1445
  "shasum": ""
1446
  },
1447
  "require": {
1448
  "ext-mbstring": "*",
1449
- "php": ">=5.5",
1450
- "sabre/xml": ">=1.5 <3.0"
1451
  },
1452
  "require-dev": {
1453
- "phpunit/phpunit": "> 4.8.35, <6.0.0"
 
1454
  },
1455
  "suggest": {
1456
  "hoa/bench": "If you would like to run the benchmark scripts"
@@ -1524,20 +1639,20 @@
1524
  "xCal",
1525
  "xCard"
1526
  ],
1527
- "time": "2019-02-19T13:05:37+00:00"
1528
  },
1529
  {
1530
  "name": "sabre/xml",
1531
- "version": "1.5.0",
1532
  "source": {
1533
  "type": "git",
1534
  "url": "https://github.com/sabre-io/xml.git",
1535
- "reference": "59b20e5bbace9912607481634f97d05a776ffca7"
1536
  },
1537
  "dist": {
1538
  "type": "zip",
1539
- "url": "https://api.github.com/repos/sabre-io/xml/zipball/59b20e5bbace9912607481634f97d05a776ffca7",
1540
- "reference": "59b20e5bbace9912607481634f97d05a776ffca7",
1541
  "shasum": ""
1542
  },
1543
  "require": {
@@ -1545,12 +1660,13 @@
1545
  "ext-xmlreader": "*",
1546
  "ext-xmlwriter": "*",
1547
  "lib-libxml": ">=2.6.20",
1548
- "php": ">=5.5.5",
1549
  "sabre/uri": ">=1.0,<3.0.0"
1550
  },
1551
  "require-dev": {
1552
- "phpunit/phpunit": "*",
1553
- "sabre/cs": "~1.0.0"
 
1554
  },
1555
  "type": "library",
1556
  "autoload": {
@@ -1587,7 +1703,7 @@
1587
  "dom",
1588
  "xml"
1589
  ],
1590
- "time": "2016-10-09T22:57:52+00:00"
1591
  },
1592
  {
1593
  "name": "splitbrain/php-archive",
@@ -1692,18 +1808,327 @@
1692
  ],
1693
  "time": "2018-05-19T19:08:49+00:00"
1694
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1695
  {
1696
  "name": "vakata/jstree",
1697
- "version": "3.3.7",
1698
  "source": {
1699
  "type": "git",
1700
  "url": "https://github.com/vakata/jstree.git",
1701
- "reference": "bc5187e5826244dee5ebdc0e9db2e2652fefe928"
1702
  },
1703
  "dist": {
1704
  "type": "zip",
1705
- "url": "https://api.github.com/repos/vakata/jstree/zipball/bc5187e5826244dee5ebdc0e9db2e2652fefe928",
1706
- "reference": "bc5187e5826244dee5ebdc0e9db2e2652fefe928",
1707
  "shasum": ""
1708
  },
1709
  "require": {
@@ -1747,13 +2172,59 @@
1747
  ],
1748
  "description": "jsTree is jquery plugin, that provides interactive trees.",
1749
  "homepage": "http://jstree.com",
1750
- "time": "2018-11-06T21:15:47+00:00"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1751
  }
1752
  ],
1753
  "packages-dev": [],
1754
  "aliases": [],
1755
  "minimum-stability": "stable",
1756
- "stability-flags": [],
 
 
1757
  "prefer-stable": true,
1758
  "prefer-lowest": false,
1759
  "platform": [],
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": "52e5fc953cbddf115b66d5cd732778d4",
8
  "packages": [
9
  {
10
  "name": "aws/aws-sdk-php",
11
+ "version": "3.140.3",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/aws/aws-sdk-php.git",
15
+ "reference": "aebd17510b6220b6e5b239730b02eaf7b9b2b816"
16
  },
17
  "dist": {
18
  "type": "zip",
19
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/aebd17510b6220b6e5b239730b02eaf7b9b2b816",
20
+ "reference": "aebd17510b6220b6e5b239730b02eaf7b9b2b816",
21
  "shasum": ""
22
  },
23
  "require": {
24
  "ext-json": "*",
25
  "ext-pcre": "*",
26
  "ext-simplexml": "*",
27
+ "guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0",
28
+ "guzzlehttp/promises": "^1.0",
 
29
  "guzzlehttp/psr7": "^1.4.1",
30
+ "mtdowling/jmespath.php": "^2.5",
31
  "php": ">=5.5"
32
  },
33
  "require-dev": {
37
  "doctrine/cache": "~1.4",
38
  "ext-dom": "*",
39
  "ext-openssl": "*",
40
+ "ext-pcntl": "*",
41
+ "ext-sockets": "*",
42
  "nette/neon": "^2.3",
43
  "phpunit/phpunit": "^4.8.35|^5.4.3",
44
+ "psr/cache": "^1.0",
45
+ "psr/simple-cache": "^1.0",
46
+ "sebastian/comparator": "^1.2.3"
47
  },
48
  "suggest": {
49
  "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
50
  "doctrine/cache": "To use the DoctrineCacheAdapter",
51
  "ext-curl": "To send requests using cURL",
52
+ "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages",
53
+ "ext-sockets": "To use client-side monitoring"
54
  },
55
  "type": "library",
56
  "extra": {
88
  "s3",
89
  "sdk"
90
  ],
91
+ "time": "2020-06-08T18:19:35+00:00"
92
  },
93
  {
94
  "name": "components/jquery",
95
+ "version": "3.5.1",
96
  "source": {
97
  "type": "git",
98
  "url": "https://github.com/components/jquery.git",
99
+ "reference": "b33e8f0f9a1cb2ae390cf05d766a900b53d2125b"
100
  },
101
  "dist": {
102
  "type": "zip",
103
+ "url": "https://api.github.com/repos/components/jquery/zipball/b33e8f0f9a1cb2ae390cf05d766a900b53d2125b",
104
+ "reference": "b33e8f0f9a1cb2ae390cf05d766a900b53d2125b",
105
  "shasum": ""
106
  },
107
  "type": "component",
130
  ],
131
  "description": "jQuery JavaScript Library",
132
  "homepage": "http://jquery.com",
133
+ "time": "2020-05-05T13:21:02+00:00"
134
  },
135
  {
136
  "name": "gliterd/backblaze-b2",
137
+ "version": "1.3.0",
138
  "source": {
139
  "type": "git",
140
  "url": "https://github.com/gliterd/backblaze-b2.git",
141
+ "reference": "9dc2006168a50fba84a0f7eab8b9225030f4bf25"
142
  },
143
  "dist": {
144
  "type": "zip",
145
+ "url": "https://api.github.com/repos/gliterd/backblaze-b2/zipball/9dc2006168a50fba84a0f7eab8b9225030f4bf25",
146
+ "reference": "9dc2006168a50fba84a0f7eab8b9225030f4bf25",
147
  "shasum": ""
148
  },
149
  "require": {
150
  "guzzlehttp/guzzle": "^6.1",
151
+ "nesbot/carbon": "~1.20",
152
+ "php": "^7.1.8"
153
  },
154
  "require-dev": {
155
  "phpunit/phpunit": "4.8.*",
185
  "filesystem",
186
  "storage"
187
  ],
188
+ "time": "2019-07-24T17:42:22+00:00"
189
  },
190
  {
191
  "name": "guzzlehttp/guzzle",
192
+ "version": "6.5.4",
193
  "source": {
194
  "type": "git",
195
  "url": "https://github.com/guzzle/guzzle.git",
196
+ "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d"
197
  },
198
  "dist": {
199
  "type": "zip",
200
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
201
+ "reference": "a4a1b6930528a8f7ee03518e6442ec7a44155d9d",
202
  "shasum": ""
203
  },
204
  "require": {
205
  "ext-json": "*",
206
  "guzzlehttp/promises": "^1.0",
207
  "guzzlehttp/psr7": "^1.6.1",
208
+ "php": ">=5.5",
209
+ "symfony/polyfill-intl-idn": "1.17.0"
210
  },
211
  "require-dev": {
212
  "ext-curl": "*",
214
  "psr/log": "^1.1"
215
  },
216
  "suggest": {
 
217
  "psr/log": "Required for using the Log middleware"
218
  },
219
  "type": "library",
252
  "rest",
253
  "web service"
254
  ],
255
+ "time": "2020-05-25T19:35:05+00:00"
256
  },
257
  {
258
  "name": "guzzlehttp/promises",
376
  ],
377
  "time": "2019-07-01T23:21:34+00:00"
378
  },
379
+ {
380
+ "name": "kylekatarnls/update-helper",
381
+ "version": "1.2.1",
382
+ "source": {
383
+ "type": "git",
384
+ "url": "https://github.com/kylekatarnls/update-helper.git",
385
+ "reference": "429be50660ed8a196e0798e5939760f168ec8ce9"
386
+ },
387
+ "dist": {
388
+ "type": "zip",
389
+ "url": "https://api.github.com/repos/kylekatarnls/update-helper/zipball/429be50660ed8a196e0798e5939760f168ec8ce9",
390
+ "reference": "429be50660ed8a196e0798e5939760f168ec8ce9",
391
+ "shasum": ""
392
+ },
393
+ "require": {
394
+ "composer-plugin-api": "^1.1.0 || ^2.0.0",
395
+ "php": ">=5.3.0"
396
+ },
397
+ "require-dev": {
398
+ "codeclimate/php-test-reporter": "dev-master",
399
+ "composer/composer": "2.0.x-dev || ^2.0.0-dev",
400
+ "phpunit/phpunit": ">=4.8.35 <6.0"
401
+ },
402
+ "type": "composer-plugin",
403
+ "extra": {
404
+ "class": "UpdateHelper\\ComposerPlugin"
405
+ },
406
+ "autoload": {
407
+ "psr-0": {
408
+ "UpdateHelper\\": "src/"
409
+ }
410
+ },
411
+ "notification-url": "https://packagist.org/downloads/",
412
+ "license": [
413
+ "MIT"
414
+ ],
415
+ "authors": [
416
+ {
417
+ "name": "Kyle",
418
+ "email": "kylekatarnls@gmail.com"
419
+ }
420
+ ],
421
+ "description": "Update helper",
422
+ "time": "2020-04-07T20:44:10+00:00"
423
+ },
424
  {
425
  "name": "league/flysystem",
426
+ "version": "1.0.69",
427
  "source": {
428
  "type": "git",
429
  "url": "https://github.com/thephpleague/flysystem.git",
430
+ "reference": "7106f78428a344bc4f643c233a94e48795f10967"
431
  },
432
  "dist": {
433
  "type": "zip",
434
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/7106f78428a344bc4f643c233a94e48795f10967",
435
+ "reference": "7106f78428a344bc4f643c233a94e48795f10967",
436
  "shasum": ""
437
  },
438
  "require": {
444
  },
445
  "require-dev": {
446
  "phpspec/phpspec": "^3.4",
447
+ "phpunit/phpunit": "^5.7.26"
448
  },
449
  "suggest": {
450
  "ext-fileinfo": "Required for MimeType",
503
  "sftp",
504
  "storage"
505
  ],
506
+ "time": "2020-05-18T15:13:39+00:00"
507
  },
508
  {
509
  "name": "league/flysystem-aws-s3-v3",
510
+ "version": "1.0.25",
511
  "source": {
512
  "type": "git",
513
  "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
514
+ "reference": "d409b97a50bf85fbde30cbc9fc10237475e696ea"
515
  },
516
  "dist": {
517
  "type": "zip",
518
+ "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/d409b97a50bf85fbde30cbc9fc10237475e696ea",
519
+ "reference": "d409b97a50bf85fbde30cbc9fc10237475e696ea",
520
  "shasum": ""
521
  },
522
  "require": {
550
  }
551
  ],
552
  "description": "Flysystem adapter for the AWS S3 SDK v3.x",
553
+ "time": "2020-06-02T18:41:58+00:00"
554
  },
555
  {
556
  "name": "league/flysystem-azure-blob-storage",
595
  },
596
  {
597
  "name": "league/flysystem-sftp",
598
+ "version": "1.0.22",
599
  "source": {
600
  "type": "git",
601
  "url": "https://github.com/thephpleague/flysystem-sftp.git",
602
+ "reference": "cab59dd2277e02fe46f5f23195672a02ed49774d"
603
  },
604
  "dist": {
605
  "type": "zip",
606
+ "url": "https://api.github.com/repos/thephpleague/flysystem-sftp/zipball/cab59dd2277e02fe46f5f23195672a02ed49774d",
607
+ "reference": "cab59dd2277e02fe46f5f23195672a02ed49774d",
608
  "shasum": ""
609
  },
610
  "require": {
633
  }
634
  ],
635
  "description": "Flysystem adapter for SFTP",
636
+ "time": "2019-10-16T20:05:49+00:00"
637
  },
638
  {
639
  "name": "league/flysystem-webdav",
640
+ "version": "1.0.9",
641
  "source": {
642
  "type": "git",
643
  "url": "https://github.com/thephpleague/flysystem-webdav.git",
644
+ "reference": "b5c3c756e60cbd495173ce09c0a68a858803f4ce"
645
  },
646
  "dist": {
647
  "type": "zip",
648
+ "url": "https://api.github.com/repos/thephpleague/flysystem-webdav/zipball/b5c3c756e60cbd495173ce09c0a68a858803f4ce",
649
+ "reference": "b5c3c756e60cbd495173ce09c0a68a858803f4ce",
650
  "shasum": ""
651
  },
652
  "require": {
653
  "league/flysystem": "~1.0",
654
+ "php": ">=5.6",
655
+ "sabre/dav": "~4.0|~3.1"
656
  },
657
  "require-dev": {
658
+ "mockery/mockery": "~1.2",
659
+ "phpunit/phpunit": "~4.8"
660
  },
661
  "type": "library",
662
  "extra": {
680
  }
681
  ],
682
  "description": "Flysystem adapter for WebDAV",
683
+ "time": "2019-12-13T22:44:03+00:00"
684
  },
685
  {
686
  "name": "mhetreramesh/flysystem-backblaze",
687
+ "version": "1.5.2",
688
  "source": {
689
  "type": "git",
690
  "url": "https://github.com/gliterd/flysystem-backblaze.git",
691
+ "reference": "42549be7b3e6f372c824896ccd1d901052cb6d8c"
692
  },
693
  "dist": {
694
  "type": "zip",
695
+ "url": "https://api.github.com/repos/gliterd/flysystem-backblaze/zipball/42549be7b3e6f372c824896ccd1d901052cb6d8c",
696
+ "reference": "42549be7b3e6f372c824896ccd1d901052cb6d8c",
697
  "shasum": ""
698
  },
699
  "require": {
700
  "gliterd/backblaze-b2": "*",
701
  "league/flysystem": "~1.0",
702
  "mikey179/vfsstream": "*",
703
+ "php": "^7.1.8",
704
  "psr/http-message-implementation": "*"
705
  },
706
  "require-dev": {
735
  "client",
736
  "filesystem"
737
  ],
738
+ "time": "2019-01-11T22:47:47+00:00"
739
  },
740
  {
741
  "name": "microsoft/azure-storage-blob",
742
+ "version": "1.5.0",
743
  "source": {
744
  "type": "git",
745
  "url": "https://github.com/Azure/azure-storage-blob-php.git",
746
+ "reference": "6a333cd28a3742c3e99e79042dc6510f9f917919"
747
  },
748
  "dist": {
749
  "type": "zip",
750
+ "url": "https://api.github.com/repos/Azure/azure-storage-blob-php/zipball/6a333cd28a3742c3e99e79042dc6510f9f917919",
751
+ "reference": "6a333cd28a3742c3e99e79042dc6510f9f917919",
752
  "shasum": ""
753
  },
754
  "require": {
779
  "sdk",
780
  "storage"
781
  ],
782
+ "time": "2020-01-02T07:18:59+00:00"
783
  },
784
  {
785
  "name": "microsoft/azure-storage-common",
786
+ "version": "1.4.1",
787
  "source": {
788
  "type": "git",
789
  "url": "https://github.com/Azure/azure-storage-common-php.git",
790
+ "reference": "be4df800761d0d0fa91a9460c7f42517197d57a0"
791
  },
792
  "dist": {
793
  "type": "zip",
794
+ "url": "https://api.github.com/repos/Azure/azure-storage-common-php/zipball/be4df800761d0d0fa91a9460c7f42517197d57a0",
795
+ "reference": "be4df800761d0d0fa91a9460c7f42517197d57a0",
796
  "shasum": ""
797
  },
798
  "require": {
823
  "sdk",
824
  "storage"
825
  ],
826
+ "time": "2020-01-02T07:15:54+00:00"
827
  },
828
  {
829
  "name": "mikey179/vfsstream",
873
  },
874
  {
875
  "name": "monolog/monolog",
876
+ "version": "1.25.4",
877
  "source": {
878
  "type": "git",
879
  "url": "https://github.com/Seldaek/monolog.git",
880
+ "reference": "3022efff205e2448b560c833c6fbbf91c3139168"
881
  },
882
  "dist": {
883
  "type": "zip",
884
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/3022efff205e2448b560c833c6fbbf91c3139168",
885
+ "reference": "3022efff205e2448b560c833c6fbbf91c3139168",
886
  "shasum": ""
887
  },
888
  "require": {
896
  "aws/aws-sdk-php": "^2.4.9 || ^3.0",
897
  "doctrine/couchdb": "~1.0@dev",
898
  "graylog2/gelf-php": "~1.0",
 
899
  "php-amqplib/php-amqplib": "~2.4",
900
  "php-console/php-console": "^3.1.3",
901
+ "php-parallel-lint/php-parallel-lint": "^1.0",
902
  "phpunit/phpunit": "~4.5",
 
903
  "ruflin/elastica": ">=0.90 <3.0",
904
  "sentry/sentry": "^0.13",
905
  "swiftmailer/swiftmailer": "^5.3|^6.0"
946
  "logging",
947
  "psr-3"
948
  ],
949
+ "time": "2020-05-22T07:31:27+00:00"
950
  },
951
  {
952
  "name": "mtdowling/jmespath.php",
953
+ "version": "2.5.0",
954
  "source": {
955
  "type": "git",
956
  "url": "https://github.com/jmespath/jmespath.php.git",
957
+ "reference": "52168cb9472de06979613d365c7f1ab8798be895"
958
  },
959
  "dist": {
960
  "type": "zip",
961
+ "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/52168cb9472de06979613d365c7f1ab8798be895",
962
+ "reference": "52168cb9472de06979613d365c7f1ab8798be895",
963
  "shasum": ""
964
  },
965
  "require": {
966
+ "php": ">=5.4.0",
967
+ "symfony/polyfill-mbstring": "^1.4"
968
  },
969
  "require-dev": {
970
+ "composer/xdebug-handler": "^1.2",
971
+ "phpunit/phpunit": "^4.8.36|^7.5.15"
972
  },
973
  "bin": [
974
  "bin/jp.php"
976
  "type": "library",
977
  "extra": {
978
  "branch-alias": {
979
+ "dev-master": "2.5-dev"
980
  }
981
  },
982
  "autoload": {
1003
  "json",
1004
  "jsonpath"
1005
  ],
1006
+ "time": "2019-12-30T18:03:34+00:00"
1007
+ },
1008
+ {
1009
+ "name": "nesbot/carbon",
1010
+ "version": "1.39.1",
1011
+ "source": {
1012
+ "type": "git",
1013
+ "url": "https://github.com/briannesbitt/Carbon.git",
1014
+ "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33"
1015
+ },
1016
+ "dist": {
1017
+ "type": "zip",
1018
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4be0c005164249208ce1b5ca633cd57bdd42ff33",
1019
+ "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33",
1020
+ "shasum": ""
1021
+ },
1022
+ "require": {
1023
+ "kylekatarnls/update-helper": "^1.1",
1024
+ "php": ">=5.3.9",
1025
+ "symfony/translation": "~2.6 || ~3.0 || ~4.0"
1026
+ },
1027
+ "require-dev": {
1028
+ "composer/composer": "^1.2",
1029
+ "friendsofphp/php-cs-fixer": "~2",
1030
+ "phpunit/phpunit": "^4.8.35 || ^5.7"
1031
+ },
1032
+ "bin": [
1033
+ "bin/upgrade-carbon"
1034
+ ],
1035
+ "type": "library",
1036
+ "extra": {
1037
+ "update-helper": "Carbon\\Upgrade",
1038
+ "laravel": {
1039
+ "providers": [
1040
+ "Carbon\\Laravel\\ServiceProvider"
1041
+ ]
1042
+ }
1043
+ },
1044
+ "autoload": {
1045
+ "psr-4": {
1046
+ "": "src/"
1047
+ }
1048
+ },
1049
+ "notification-url": "https://packagist.org/downloads/",
1050
+ "license": [
1051
+ "MIT"
1052
+ ],
1053
+ "authors": [
1054
+ {
1055
+ "name": "Brian Nesbitt",
1056
+ "email": "brian@nesbot.com",
1057
+ "homepage": "http://nesbot.com"
1058
+ }
1059
+ ],
1060
+ "description": "A simple API extension for DateTime.",
1061
+ "homepage": "http://carbon.nesbot.com",
1062
+ "keywords": [
1063
+ "date",
1064
+ "datetime",
1065
+ "time"
1066
+ ],
1067
+ "time": "2019-10-14T05:51:36+00:00"
1068
  },
1069
  {
1070
  "name": "phpseclib/phpseclib",
1071
+ "version": "2.0.27",
1072
  "source": {
1073
  "type": "git",
1074
  "url": "https://github.com/phpseclib/phpseclib.git",
1075
+ "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc"
1076
  },
1077
  "dist": {
1078
  "type": "zip",
1079
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc",
1080
+ "reference": "34620af4df7d1988d8f0d7e91f6c8a3bf931d8dc",
1081
  "shasum": ""
1082
  },
1083
  "require": {
1156
  "x.509",
1157
  "x509"
1158
  ],
1159
+ "time": "2020-04-04T23:17:33+00:00"
1160
  },
1161
  {
1162
  "name": "psr/http-message",
1210
  },
1211
  {
1212
  "name": "psr/log",
1213
+ "version": "1.1.3",
1214
  "source": {
1215
  "type": "git",
1216
  "url": "https://github.com/php-fig/log.git",
1217
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
1218
  },
1219
  "dist": {
1220
  "type": "zip",
1221
+ "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
1222
+ "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
1223
  "shasum": ""
1224
  },
1225
  "require": {
1228
  "type": "library",
1229
  "extra": {
1230
  "branch-alias": {
1231
+ "dev-master": "1.1.x-dev"
1232
  }
1233
  },
1234
  "autoload": {
1253
  "psr",
1254
  "psr-3"
1255
  ],
1256
+ "time": "2020-03-23T09:12:05+00:00"
1257
  },
1258
  {
1259
  "name": "ralouphie/getallheaders",
1297
  },
1298
  {
1299
  "name": "sabre/dav",
1300
+ "version": "4.1.0",
1301
  "source": {
1302
  "type": "git",
1303
  "url": "https://github.com/sabre-io/dav.git",
1304
+ "reference": "8f6f4d272504ee8424e1d0a47d6efc7772de2270"
1305
  },
1306
  "dist": {
1307
  "type": "zip",
1308
+ "url": "https://api.github.com/repos/sabre-io/dav/zipball/8f6f4d272504ee8424e1d0a47d6efc7772de2270",
1309
+ "reference": "8f6f4d272504ee8424e1d0a47d6efc7772de2270",
1310
  "shasum": ""
1311
  },
1312
  "require": {
1314
  "ext-date": "*",
1315
  "ext-dom": "*",
1316
  "ext-iconv": "*",
1317
+ "ext-json": "*",
1318
  "ext-mbstring": "*",
1319
  "ext-pcre": "*",
1320
  "ext-simplexml": "*",
1321
  "ext-spl": "*",
1322
  "lib-libxml": ">=2.7.0",
1323
+ "php": "^7.1.0",
1324
  "psr/log": "^1.0",
1325
+ "sabre/event": "^5.0",
1326
+ "sabre/http": "^5.0.5",
1327
+ "sabre/uri": "^2.0",
1328
+ "sabre/vobject": "^4.2.1",
1329
+ "sabre/xml": "^2.0.1"
1330
  },
1331
  "require-dev": {
1332
  "evert/phpdoc-md": "~0.1.0",
1333
+ "friendsofphp/php-cs-fixer": "~2.16.1",
1334
  "monolog/monolog": "^1.18",
1335
+ "phpstan/phpstan": "^0.12",
1336
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
1337
  },
1338
  "suggest": {
1339
  "ext-curl": "*",
1340
+ "ext-imap": "*",
1341
  "ext-pdo": "*"
1342
  },
1343
  "bin": [
1345
  "bin/naturalselection"
1346
  ],
1347
  "type": "library",
 
 
 
 
 
1348
  "autoload": {
1349
  "psr-4": {
1350
  "Sabre\\DAV\\": "lib/DAV/",
1374
  "framework",
1375
  "iCalendar"
1376
  ],
1377
+ "time": "2020-03-20T08:55:46+00:00"
1378
  },
1379
  {
1380
  "name": "sabre/event",
1381
+ "version": "5.1.0",
1382
  "source": {
1383
  "type": "git",
1384
  "url": "https://github.com/sabre-io/event.git",
1385
+ "reference": "d00a17507af0e7544cfe17096372f5d733e3b276"
1386
  },
1387
  "dist": {
1388
  "type": "zip",
1389
+ "url": "https://api.github.com/repos/sabre-io/event/zipball/d00a17507af0e7544cfe17096372f5d733e3b276",
1390
+ "reference": "d00a17507af0e7544cfe17096372f5d733e3b276",
1391
  "shasum": ""
1392
  },
1393
  "require": {
1394
+ "php": "^7.1"
1395
  },
1396
  "require-dev": {
1397
+ "friendsofphp/php-cs-fixer": "~2.16.1",
1398
+ "phpunit/phpunit": "^7 || ^8"
1399
  },
1400
  "type": "library",
1401
  "autoload": {
1425
  "keywords": [
1426
  "EventEmitter",
1427
  "async",
1428
+ "coroutine",
1429
+ "eventloop",
1430
  "events",
1431
  "hooks",
1432
  "plugin",
1433
  "promise",
1434
+ "reactor",
1435
  "signal"
1436
  ],
1437
+ "time": "2020-01-31T18:52:29+00:00"
1438
  },
1439
  {
1440
  "name": "sabre/http",
1441
+ "version": "5.1.0",
1442
  "source": {
1443
  "type": "git",
1444
  "url": "https://github.com/sabre-io/http.git",
1445
+ "reference": "23446999f1f6e62892bbd89745070aa902dd3539"
1446
  },
1447
  "dist": {
1448
  "type": "zip",
1449
+ "url": "https://api.github.com/repos/sabre-io/http/zipball/23446999f1f6e62892bbd89745070aa902dd3539",
1450
+ "reference": "23446999f1f6e62892bbd89745070aa902dd3539",
1451
  "shasum": ""
1452
  },
1453
  "require": {
1454
  "ext-ctype": "*",
1455
+ "ext-curl": "*",
1456
  "ext-mbstring": "*",
1457
+ "php": "^7.1",
1458
+ "sabre/event": ">=4.0 <6.0",
1459
+ "sabre/uri": "^2.0"
1460
  },
1461
  "require-dev": {
1462
+ "friendsofphp/php-cs-fixer": "~2.16.1",
1463
+ "phpunit/phpunit": "^7.0 || ^8.0"
1464
  },
1465
  "suggest": {
1466
  "ext-curl": " to make http requests with the Client class"
1491
  "keywords": [
1492
  "http"
1493
  ],
1494
+ "time": "2020-01-31T20:07:09+00:00"
1495
  },
1496
  {
1497
  "name": "sabre/uri",
1498
+ "version": "2.2.0",
1499
  "source": {
1500
  "type": "git",
1501
  "url": "https://github.com/sabre-io/uri.git",
1502
+ "reference": "059d11012603be2e32ddb7543602965563ddbb09"
1503
  },
1504
  "dist": {
1505
  "type": "zip",
1506
+ "url": "https://api.github.com/repos/sabre-io/uri/zipball/059d11012603be2e32ddb7543602965563ddbb09",
1507
+ "reference": "059d11012603be2e32ddb7543602965563ddbb09",
1508
  "shasum": ""
1509
  },
1510
  "require": {
1511
+ "php": "^7.1"
1512
  },
1513
  "require-dev": {
1514
+ "friendsofphp/php-cs-fixer": "~2.16.1",
1515
+ "phpunit/phpunit": "^7 || ^8"
1516
  },
1517
  "type": "library",
1518
  "autoload": {
1542
  "uri",
1543
  "url"
1544
  ],
1545
+ "time": "2020-01-31T18:53:43+00:00"
1546
  },
1547
  {
1548
  "name": "sabre/vobject",
1549
+ "version": "4.3.0",
1550
  "source": {
1551
  "type": "git",
1552
  "url": "https://github.com/sabre-io/vobject.git",
1553
+ "reference": "5b2248d965160f93053f3a24704794a13a22a1bb"
1554
  },
1555
  "dist": {
1556
  "type": "zip",
1557
+ "url": "https://api.github.com/repos/sabre-io/vobject/zipball/5b2248d965160f93053f3a24704794a13a22a1bb",
1558
+ "reference": "5b2248d965160f93053f3a24704794a13a22a1bb",
1559
  "shasum": ""
1560
  },
1561
  "require": {
1562
  "ext-mbstring": "*",
1563
+ "php": "^7.1",
1564
+ "sabre/xml": "^2.1"
1565
  },
1566
  "require-dev": {
1567
+ "friendsofphp/php-cs-fixer": "~2.16.1",
1568
+ "phpunit/phpunit": "^7 || ^8"
1569
  },
1570
  "suggest": {
1571
  "hoa/bench": "If you would like to run the benchmark scripts"
1639
  "xCal",
1640
  "xCard"
1641
  ],
1642
+ "time": "2020-01-31T18:50:58+00:00"
1643
  },
1644
  {
1645
  "name": "sabre/xml",
1646
+ "version": "2.2.1",
1647
  "source": {
1648
  "type": "git",
1649
  "url": "https://github.com/sabre-io/xml.git",
1650
+ "reference": "41c6ba148966b10cafd31d1a4e5feb1e2138d95c"
1651
  },
1652
  "dist": {
1653
  "type": "zip",
1654
+ "url": "https://api.github.com/repos/sabre-io/xml/zipball/41c6ba148966b10cafd31d1a4e5feb1e2138d95c",
1655
+ "reference": "41c6ba148966b10cafd31d1a4e5feb1e2138d95c",
1656
  "shasum": ""
1657
  },
1658
  "require": {
1660
  "ext-xmlreader": "*",
1661
  "ext-xmlwriter": "*",
1662
  "lib-libxml": ">=2.6.20",
1663
+ "php": "^7.1",
1664
  "sabre/uri": ">=1.0,<3.0.0"
1665
  },
1666
  "require-dev": {
1667
+ "friendsofphp/php-cs-fixer": "~2.16.1",
1668
+ "phpstan/phpstan": "^0.12",
1669
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0"
1670
  },
1671
  "type": "library",
1672
  "autoload": {
1703
  "dom",
1704
  "xml"
1705
  ],
1706
+ "time": "2020-05-11T09:44:55+00:00"
1707
  },
1708
  {
1709
  "name": "splitbrain/php-archive",
1808
  ],
1809
  "time": "2018-05-19T19:08:49+00:00"
1810
  },
1811
+ {
1812
+ "name": "symfony/polyfill-intl-idn",
1813
+ "version": "v1.17.0",
1814
+ "source": {
1815
+ "type": "git",
1816
+ "url": "https://github.com/symfony/polyfill-intl-idn.git",
1817
+ "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a"
1818
+ },
1819
+ "dist": {
1820
+ "type": "zip",
1821
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3bff59ea7047e925be6b7f2059d60af31bb46d6a",
1822
+ "reference": "3bff59ea7047e925be6b7f2059d60af31bb46d6a",
1823
+ "shasum": ""
1824
+ },
1825
+ "require": {
1826
+ "php": ">=5.3.3",
1827
+ "symfony/polyfill-mbstring": "^1.3",
1828
+ "symfony/polyfill-php72": "^1.10"
1829
+ },
1830
+ "suggest": {
1831
+ "ext-intl": "For best performance"
1832
+ },
1833
+ "type": "library",
1834
+ "extra": {
1835
+ "branch-alias": {
1836
+ "dev-master": "1.17-dev"
1837
+ }
1838
+ },
1839
+ "autoload": {
1840
+ "psr-4": {
1841
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
1842
+ },
1843
+ "files": [
1844
+ "bootstrap.php"
1845
+ ]
1846
+ },
1847
+ "notification-url": "https://packagist.org/downloads/",
1848
+ "license": [
1849
+ "MIT"
1850
+ ],
1851
+ "authors": [
1852
+ {
1853
+ "name": "Laurent Bassin",
1854
+ "email": "laurent@bassin.info"
1855
+ },
1856
+ {
1857
+ "name": "Symfony Community",
1858
+ "homepage": "https://symfony.com/contributors"
1859
+ }
1860
+ ],
1861
+ "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
1862
+ "homepage": "https://symfony.com",
1863
+ "keywords": [
1864
+ "compatibility",
1865
+ "idn",
1866
+ "intl",
1867
+ "polyfill",
1868
+ "portable",
1869
+ "shim"
1870
+ ],
1871
+ "time": "2020-05-12T16:47:27+00:00"
1872
+ },
1873
+ {
1874
+ "name": "symfony/polyfill-mbstring",
1875
+ "version": "v1.17.0",
1876
+ "source": {
1877
+ "type": "git",
1878
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
1879
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c"
1880
+ },
1881
+ "dist": {
1882
+ "type": "zip",
1883
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fa79b11539418b02fc5e1897267673ba2c19419c",
1884
+ "reference": "fa79b11539418b02fc5e1897267673ba2c19419c",
1885
+ "shasum": ""
1886
+ },
1887
+ "require": {
1888
+ "php": ">=5.3.3"
1889
+ },
1890
+ "suggest": {
1891
+ "ext-mbstring": "For best performance"
1892
+ },
1893
+ "type": "library",
1894
+ "extra": {
1895
+ "branch-alias": {
1896
+ "dev-master": "1.17-dev"
1897
+ }
1898
+ },
1899
+ "autoload": {
1900
+ "psr-4": {
1901
+ "Symfony\\Polyfill\\Mbstring\\": ""
1902
+ },
1903
+ "files": [
1904
+ "bootstrap.php"
1905
+ ]
1906
+ },
1907
+ "notification-url": "https://packagist.org/downloads/",
1908
+ "license": [
1909
+ "MIT"
1910
+ ],
1911
+ "authors": [
1912
+ {
1913
+ "name": "Nicolas Grekas",
1914
+ "email": "p@tchwork.com"
1915
+ },
1916
+ {
1917
+ "name": "Symfony Community",
1918
+ "homepage": "https://symfony.com/contributors"
1919
+ }
1920
+ ],
1921
+ "description": "Symfony polyfill for the Mbstring extension",
1922
+ "homepage": "https://symfony.com",
1923
+ "keywords": [
1924
+ "compatibility",
1925
+ "mbstring",
1926
+ "polyfill",
1927
+ "portable",
1928
+ "shim"
1929
+ ],
1930
+ "time": "2020-05-12T16:47:27+00:00"
1931
+ },
1932
+ {
1933
+ "name": "symfony/polyfill-php72",
1934
+ "version": "v1.17.0",
1935
+ "source": {
1936
+ "type": "git",
1937
+ "url": "https://github.com/symfony/polyfill-php72.git",
1938
+ "reference": "f048e612a3905f34931127360bdd2def19a5e582"
1939
+ },
1940
+ "dist": {
1941
+ "type": "zip",
1942
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582",
1943
+ "reference": "f048e612a3905f34931127360bdd2def19a5e582",
1944
+ "shasum": ""
1945
+ },
1946
+ "require": {
1947
+ "php": ">=5.3.3"
1948
+ },
1949
+ "type": "library",
1950
+ "extra": {
1951
+ "branch-alias": {
1952
+ "dev-master": "1.17-dev"
1953
+ }
1954
+ },
1955
+ "autoload": {
1956
+ "psr-4": {
1957
+ "Symfony\\Polyfill\\Php72\\": ""
1958
+ },
1959
+ "files": [
1960
+ "bootstrap.php"
1961
+ ]
1962
+ },
1963
+ "notification-url": "https://packagist.org/downloads/",
1964
+ "license": [
1965
+ "MIT"
1966
+ ],
1967
+ "authors": [
1968
+ {
1969
+ "name": "Nicolas Grekas",
1970
+ "email": "p@tchwork.com"
1971
+ },
1972
+ {
1973
+ "name": "Symfony Community",
1974
+ "homepage": "https://symfony.com/contributors"
1975
+ }
1976
+ ],
1977
+ "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
1978
+ "homepage": "https://symfony.com",
1979
+ "keywords": [
1980
+ "compatibility",
1981
+ "polyfill",
1982
+ "portable",
1983
+ "shim"
1984
+ ],
1985
+ "time": "2020-05-12T16:47:27+00:00"
1986
+ },
1987
+ {
1988
+ "name": "symfony/translation",
1989
+ "version": "v4.4.9",
1990
+ "source": {
1991
+ "type": "git",
1992
+ "url": "https://github.com/symfony/translation.git",
1993
+ "reference": "79d3ef9096a6a6047dbc69218b68c7b7f63193af"
1994
+ },
1995
+ "dist": {
1996
+ "type": "zip",
1997
+ "url": "https://api.github.com/repos/symfony/translation/zipball/79d3ef9096a6a6047dbc69218b68c7b7f63193af",
1998
+ "reference": "79d3ef9096a6a6047dbc69218b68c7b7f63193af",
1999
+ "shasum": ""
2000
+ },
2001
+ "require": {
2002
+ "php": ">=7.1.3",
2003
+ "symfony/polyfill-mbstring": "~1.0",
2004
+ "symfony/translation-contracts": "^1.1.6|^2"
2005
+ },
2006
+ "conflict": {
2007
+ "symfony/config": "<3.4",
2008
+ "symfony/dependency-injection": "<3.4",
2009
+ "symfony/http-kernel": "<4.4",
2010
+ "symfony/yaml": "<3.4"
2011
+ },
2012
+ "provide": {
2013
+ "symfony/translation-implementation": "1.0"
2014
+ },
2015
+ "require-dev": {
2016
+ "psr/log": "~1.0",
2017
+ "symfony/config": "^3.4|^4.0|^5.0",
2018
+ "symfony/console": "^3.4|^4.0|^5.0",
2019
+ "symfony/dependency-injection": "^3.4|^4.0|^5.0",
2020
+ "symfony/finder": "~2.8|~3.0|~4.0|^5.0",
2021
+ "symfony/http-kernel": "^4.4",
2022
+ "symfony/intl": "^3.4|^4.0|^5.0",
2023
+ "symfony/service-contracts": "^1.1.2|^2",
2024
+ "symfony/yaml": "^3.4|^4.0|^5.0"
2025
+ },
2026
+ "suggest": {
2027
+ "psr/log-implementation": "To use logging capability in translator",
2028
+ "symfony/config": "",
2029
+ "symfony/yaml": ""
2030
+ },
2031
+ "type": "library",
2032
+ "extra": {
2033
+ "branch-alias": {
2034
+ "dev-master": "4.4-dev"
2035
+ }
2036
+ },
2037
+ "autoload": {
2038
+ "psr-4": {
2039
+ "Symfony\\Component\\Translation\\": ""
2040
+ },
2041
+ "exclude-from-classmap": [
2042
+ "/Tests/"
2043
+ ]
2044
+ },
2045
+ "notification-url": "https://packagist.org/downloads/",
2046
+ "license": [
2047
+ "MIT"
2048
+ ],
2049
+ "authors": [
2050
+ {
2051
+ "name": "Fabien Potencier",
2052
+ "email": "fabien@symfony.com"
2053
+ },
2054
+ {
2055
+ "name": "Symfony Community",
2056
+ "homepage": "https://symfony.com/contributors"
2057
+ }
2058
+ ],
2059
+ "description": "Symfony Translation Component",
2060
+ "homepage": "https://symfony.com",
2061
+ "time": "2020-05-30T20:06:45+00:00"
2062
+ },
2063
+ {
2064
+ "name": "symfony/translation-contracts",
2065
+ "version": "v2.1.2",
2066
+ "source": {
2067
+ "type": "git",
2068
+ "url": "https://github.com/symfony/translation-contracts.git",
2069
+ "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e"
2070
+ },
2071
+ "dist": {
2072
+ "type": "zip",
2073
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/e5ca07c8f817f865f618aa072c2fe8e0e637340e",
2074
+ "reference": "e5ca07c8f817f865f618aa072c2fe8e0e637340e",
2075
+ "shasum": ""
2076
+ },
2077
+ "require": {
2078
+ "php": ">=7.2.5"
2079
+ },
2080
+ "suggest": {
2081
+ "symfony/translation-implementation": ""
2082
+ },
2083
+ "type": "library",
2084
+ "extra": {
2085
+ "branch-alias": {
2086
+ "dev-master": "2.1-dev"
2087
+ }
2088
+ },
2089
+ "autoload": {
2090
+ "psr-4": {
2091
+ "Symfony\\Contracts\\Translation\\": ""
2092
+ }
2093
+ },
2094
+ "notification-url": "https://packagist.org/downloads/",
2095
+ "license": [
2096
+ "MIT"
2097
+ ],
2098
+ "authors": [
2099
+ {
2100
+ "name": "Nicolas Grekas",
2101
+ "email": "p@tchwork.com"
2102
+ },
2103
+ {
2104
+ "name": "Symfony Community",
2105
+ "homepage": "https://symfony.com/contributors"
2106
+ }
2107
+ ],
2108
+ "description": "Generic abstractions related to translation",
2109
+ "homepage": "https://symfony.com",
2110
+ "keywords": [
2111
+ "abstractions",
2112
+ "contracts",
2113
+ "decoupling",
2114
+ "interfaces",
2115
+ "interoperability",
2116
+ "standards"
2117
+ ],
2118
+ "time": "2020-05-20T17:43:50+00:00"
2119
+ },
2120
  {
2121
  "name": "vakata/jstree",
2122
+ "version": "3.3.9",
2123
  "source": {
2124
  "type": "git",
2125
  "url": "https://github.com/vakata/jstree.git",
2126
+ "reference": "a7f224265891eee74d85b469006ab461bd430f48"
2127
  },
2128
  "dist": {
2129
  "type": "zip",
2130
+ "url": "https://api.github.com/repos/vakata/jstree/zipball/a7f224265891eee74d85b469006ab461bd430f48",
2131
+ "reference": "a7f224265891eee74d85b469006ab461bd430f48",
2132
  "shasum": ""
2133
  },
2134
  "require": {
2172
  ],
2173
  "description": "jsTree is jquery plugin, that provides interactive trees.",
2174
  "homepage": "http://jstree.com",
2175
+ "time": "2020-02-10T22:25:09+00:00"
2176
+ },
2177
+ {
2178
+ "name": "watchfulli/xcloner-core",
2179
+ "version": "dev-master",
2180
+ "source": {
2181
+ "type": "git",
2182
+ "url": "https://github.com/watchfulli/xcloner-core.git",
2183
+ "reference": "86ab75c8a1b3bb87d55e91f4ba6866b15a6dd9d5"
2184
+ },
2185
+ "dist": {
2186
+ "type": "zip",
2187
+ "url": "https://api.github.com/repos/watchfulli/xcloner-core/zipball/86ab75c8a1b3bb87d55e91f4ba6866b15a6dd9d5",
2188
+ "reference": "86ab75c8a1b3bb87d55e91f4ba6866b15a6dd9d5",
2189
+ "shasum": ""
2190
+ },
2191
+ "require": {
2192
+ "league/flysystem": "^1.0",
2193
+ "league/flysystem-aws-s3-v3": "^1.0",
2194
+ "league/flysystem-azure-blob-storage": "^0.1.6",
2195
+ "league/flysystem-sftp": "^1.0",
2196
+ "league/flysystem-webdav": "^1.0",
2197
+ "mhetreramesh/flysystem-backblaze": "^1.0",
2198
+ "monolog/monolog": "^1.22",
2199
+ "splitbrain/php-archive": "^1.0",
2200
+ "srmklive/flysystem-dropbox-v2": "^1.0"
2201
+ },
2202
+ "type": "package",
2203
+ "autoload": {
2204
+ "psr-4": {
2205
+ "watchfulli\\XClonerCore\\": "src/"
2206
+ }
2207
+ },
2208
+ "notification-url": "https://packagist.org/downloads/",
2209
+ "license": [
2210
+ "AGPL-3.0-or-later"
2211
+ ],
2212
+ "authors": [
2213
+ {
2214
+ "name": "Ovidiu Liuta",
2215
+ "email": "info@thinkovi.com"
2216
+ }
2217
+ ],
2218
+ "description": "XCloner Core Library for Backup and Restore",
2219
+ "time": "2020-06-12T11:32:11+00:00"
2220
  }
2221
  ],
2222
  "packages-dev": [],
2223
  "aliases": [],
2224
  "minimum-stability": "stable",
2225
+ "stability-flags": {
2226
+ "watchfulli/xcloner-core": 20
2227
+ },
2228
  "prefer-stable": true,
2229
  "prefer-lowest": false,
2230
  "platform": [],
examples/cli_encrypt_backup.php CHANGED
@@ -7,6 +7,10 @@
7
  define('WP_DEBUG', true);
8
  define('WP_DEBUG_DISPLAY', true);
9
 
 
 
 
 
10
  if (isset($argv[1])) {
11
  $backup_name = $argv[1];
12
  }
@@ -25,7 +29,9 @@ if (isset($argv[3]) && substr($argv[3], 0, 6) == '--key=') {
25
  $key = substr($argv[3], 6, strlen($argv[3]));
26
  }
27
 
28
- require_once(dirname(__DIR__) . '/includes/class-xcloner-standalone.php');
 
 
29
 
30
  //loading the default xcloner settings in format [{'option_name':'value', {'option_value': 'value'}}]
31
  $json_config = json_decode(file_get_contents(__DIR__ . '/standalone_backup_trigger_config.json'));
@@ -35,7 +41,7 @@ if (!$json_config) {
35
  }
36
 
37
  //pass json config to Xcloner_Standalone lib
38
- $xcloner = new Xcloner_Standalone($json_config);
39
 
40
  if (!$backup_name) {
41
  $return = $xcloner->start();
7
  define('WP_DEBUG', true);
8
  define('WP_DEBUG_DISPLAY', true);
9
 
10
+ if(file_exists(__DIR__ . "/../../../../wp-load.php")) {
11
+ require_once(__DIR__ .'/../../../../wp-load.php');
12
+ }
13
+
14
  if (isset($argv[1])) {
15
  $backup_name = $argv[1];
16
  }
29
  $key = substr($argv[3], 6, strlen($argv[3]));
30
  }
31
 
32
+ require_once(plugin_dir_path(__FILE__).'/../vendor/autoload.php');
33
+
34
+ //require_once(dirname(__DIR__) . '/includes/class-xcloner-standalone.php');
35
 
36
  //loading the default xcloner settings in format [{'option_name':'value', {'option_value': 'value'}}]
37
  $json_config = json_decode(file_get_contents(__DIR__ . '/standalone_backup_trigger_config.json'));
41
  }
42
 
43
  //pass json config to Xcloner_Standalone lib
44
+ $xcloner = new watchfulli\XClonerCore\Xcloner_Standalone($json_config);
45
 
46
  if (!$backup_name) {
47
  $return = $xcloner->start();
examples/standalone-backup-trigger.php CHANGED
@@ -2,21 +2,12 @@
2
  define('WP_DEBUG', true);
3
  define('WP_DEBUG_DISPLAY', true);
4
 
5
- if(file_exists(__DIR__ . "/../../../../wp-load.php")) {
6
- require_once(__DIR__ .'/../../../../wp-load.php');
7
- }
8
-
9
- require_once(dirname(__DIR__) . '/includes/class-xcloner-standalone.php');
10
 
11
  $profile = [
12
  'id' => 0
13
  ];
14
 
15
- if(isset($argv[1]) && $argv[1]) {
16
- $profile_name = $argv[1];
17
- }
18
-
19
-
20
  //loading the default xcloner settings in format [{'option_name':'value', {'option_value': 'value'}}]
21
  $json_config = json_decode(file_get_contents(__DIR__ . '/standalone_backup_trigger_config.json'));
22
 
@@ -25,10 +16,6 @@ if (!$json_config) {
25
  }
26
 
27
  //pass json config to Xcloner_Standalone lib
28
- $xcloner_backup = new Xcloner_Standalone($json_config);
29
-
30
- if (isset($profile_name) && $profile_name) {
31
- $profile = ($xcloner_backup->xcloner_scheduler->get_schedule_by_id_or_name($profile_name));
32
- }
33
 
34
  $xcloner_backup->start($profile['id']);
2
  define('WP_DEBUG', true);
3
  define('WP_DEBUG_DISPLAY', true);
4
 
5
+ require_once('../vendor/autoload.php');
 
 
 
 
6
 
7
  $profile = [
8
  'id' => 0
9
  ];
10
 
 
 
 
 
 
11
  //loading the default xcloner settings in format [{'option_name':'value', {'option_value': 'value'}}]
12
  $json_config = json_decode(file_get_contents(__DIR__ . '/standalone_backup_trigger_config.json'));
13
 
16
  }
17
 
18
  //pass json config to Xcloner_Standalone lib
19
+ $xcloner_backup = new watchfulli\XClonerCore\Xcloner_Standalone($json_config);
 
 
 
 
20
 
21
  $xcloner_backup->start($profile['id']);
includes/class-xcloner-api.php DELETED
@@ -1,1507 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner - Backup and Restore backup plugin for Wordpress
4
- *
5
- * class-xcloner-api.php
6
- * @author Liuta Ovidiu <info@thinkovi.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
- * MA 02110-1301, USA.
22
- *
23
- * @link https://github.com/ovidiul/XCloner-Wordpress
24
- *
25
- * @modified 7/31/18 3:00 PM
26
- *
27
- */
28
-
29
- use League\Flysystem\Config;
30
- use League\Flysystem\Filesystem;
31
- use League\Flysystem\Util;
32
- use League\Flysystem\Adapter\Local;
33
-
34
- use splitbrain\PHPArchive\Tar;
35
- use splitbrain\PHPArchive\Zip;
36
- use splitbrain\PHPArchive\Archive;
37
- use splitbrain\PHPArchive\FileInfo;
38
-
39
- /**
40
- * XCloner Api Class
41
- */
42
- class Xcloner_Api
43
- {
44
- private $xcloner_database;
45
- private $xcloner_settings;
46
- private $xcloner_file_system;
47
- private $xcloner_scheduler;
48
- private $xcloner_requirements;
49
- private $xcloner_sanitization;
50
- private $xcloner_encryption;
51
- private $xcloner_remote_storage;
52
- private $archive_system;
53
- private $form_params;
54
- private $logger;
55
- private $xcloner_container;
56
-
57
- /**
58
- * XCloner_Api construct class
59
- *
60
- * @param Xcloner $xcloner_container [description]
61
- */
62
- public function __construct(Xcloner $xcloner_container)
63
- {
64
- //global $wpdb;
65
-
66
- if (defined('WP_DEBUG') && WP_DEBUG) {
67
- error_reporting(0);
68
- }
69
-
70
- if (ob_get_length()) {
71
- ob_end_clean();
72
- }
73
- ob_start();
74
-
75
- $this->xcloner_container = $xcloner_container;
76
-
77
- $this->xcloner_settings = $xcloner_container->get_xcloner_settings();
78
- $this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_api");
79
- $this->xcloner_file_system = $xcloner_container->get_xcloner_filesystem();
80
- $this->xcloner_sanitization = $xcloner_container->get_xcloner_sanitization();
81
- $this->xcloner_requirements = $xcloner_container->get_xcloner_requirements();
82
- $this->archive_system = $xcloner_container->get_archive_system();
83
- $this->xcloner_database = $xcloner_container->get_xcloner_database();
84
- $this->xcloner_scheduler = $xcloner_container->get_xcloner_scheduler();
85
- $this->xcloner_encryption = $xcloner_container->get_xcloner_encryption();
86
- $this->xcloner_remote_storage = $xcloner_container->get_xcloner_remote_storage();
87
-
88
- $this->xcloner_database->show_errors = false;
89
-
90
- if (isset($_POST['API_ID'])) {
91
- $this->logger->info("Processing ajax request ID ".substr(
92
- $this->xcloner_sanitization->sanitize_input_as_string($_POST['API_ID']),
93
- 0,
94
- 15
95
- ));
96
- }
97
- }
98
-
99
- /**
100
- * Get XCloner Container
101
- * @return XCloner return the XCloner container
102
- */
103
- public function get_xcloner_container()
104
- {
105
- return $this->xcloner_container;
106
- }
107
-
108
-
109
- /**
110
- * Checks API access
111
- */
112
- private function check_access()
113
- {
114
- if (function_exists('current_user_can') && !current_user_can('manage_options')) {
115
- $this->send_response(json_encode("Not allowed access here!"));
116
- }
117
- }
118
-
119
- /**
120
- * Initialize the database connection
121
- */
122
- public function init_db()
123
- {
124
- return;
125
- }
126
-
127
- /*
128
- * Save Schedule API
129
- */
130
- public function save_schedule()
131
- {
132
- //global $wpdb;
133
-
134
- $this->check_access();
135
-
136
- $scheduler = $this->xcloner_scheduler;
137
- $params = array();
138
- $schedule = array();
139
- $response = array();
140
-
141
- if (isset($_POST['data'])) {
142
- $params = json_decode(stripslashes($_POST['data']));
143
- }
144
-
145
- $this->process_params($params);
146
-
147
- if (isset($_POST['id'])) {
148
- $this->form_params['backup_params']['backup_name'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['backup_name']);
149
- $this->form_params['backup_params']['email_notification'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['email_notification']);
150
- if ($_POST['diff_start_date']) {
151
- $this->form_params['backup_params']['diff_start_date'] = strtotime($this->xcloner_sanitization->sanitize_input_as_string($_POST['diff_start_date']));
152
- } else {
153
- $this->form_params['backup_params']['diff_start_date'] = "";
154
- }
155
- $this->form_params['backup_params']['schedule_name'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_name']);
156
- $this->form_params['backup_params']['backup_encrypt'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['backup_encrypt']);
157
-
158
- $this->form_params['backup_params']['start_at'] = strtotime($_POST['schedule_start_date']);
159
- $this->form_params['backup_params']['schedule_frequency'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_frequency']);
160
- $this->form_params['backup_params']['schedule_storage'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_storage']);
161
- $this->form_params['backup_params']['backup_delete_after_remote_transfer'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['backup_delete_after_remote_transfer']);
162
-
163
- $this->form_params['database'] = (stripslashes($this->xcloner_sanitization->sanitize_input_as_raw($_POST['table_params'])));
164
- $this->form_params['excluded_files'] = (stripslashes($this->xcloner_sanitization->sanitize_input_as_raw($_POST['excluded_files'])));
165
-
166
- //$this->form_params['backup_params']['backup_type'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['backup_type']);
167
-
168
- $tables = explode(PHP_EOL, $this->form_params['database']);
169
- $return = array();
170
-
171
- foreach ($tables as $table) {
172
- $table = str_replace("\r", "", $table);
173
- $data = explode(".", $table);
174
- if (isset($data[1])) {
175
- $return[$data[0]][] = $data[1];
176
- }
177
- }
178
-
179
- $this->form_params['database'] = ($return);
180
-
181
- $excluded_files = explode(PHP_EOL, $this->form_params['excluded_files']);
182
- $return = array();
183
-
184
- foreach ($excluded_files as $file) {
185
- $file = str_replace("\r", "", $file);
186
- if ($file) {
187
- $return[] = $file;
188
- }
189
- }
190
-
191
- $this->form_params['excluded_files'] = ($return);
192
-
193
- $schedule['start_at'] = $this->form_params['backup_params']['start_at'];
194
-
195
- if (!isset($_POST['status'])) {
196
- $schedule['status'] = 0;
197
- } else {
198
- $schedule['status'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['status']);
199
- }
200
- } else {
201
- $schedule['status'] = 1;
202
- $schedule['start_at'] = strtotime($this->form_params['backup_params']['schedule_start_date'].
203
- " ".$this->form_params['backup_params']['schedule_start_time']);
204
-
205
- if ($schedule['start_at'] <= time()) {
206
- $schedule['start_at'] = "";
207
- }
208
-
209
- //fixing table names assigment
210
- foreach ($this->form_params['database'] as $db=>$tables) {
211
- if ($db == "#") {
212
- continue;
213
- }
214
-
215
- foreach ($tables as $key=>$table) {
216
- //echo $this->form_params['database'][$db][$key];
217
- $this->form_params['database'][$db][$key] = substr($table, strlen($db)+1);
218
- }
219
- }
220
- }
221
-
222
- if (!$schedule['start_at']) {
223
- $schedule['start_at'] = date('Y-m-d H:i:s', time());
224
- } else {
225
- $schedule['start_at'] = date(
226
- 'Y-m-d H:i:s',
227
- $schedule['start_at'] - ($this->xcloner_settings->get_xcloner_option('gmt_offset') * HOUR_IN_SECONDS)
228
- );
229
- }
230
-
231
- $schedule['name'] = $this->form_params['backup_params']['schedule_name'];
232
- $schedule['recurrence'] = $this->form_params['backup_params']['schedule_frequency'];
233
- if (!isset($this->form_params['backup_params']['schedule_storage'])) {
234
- $this->form_params['backup_params']['schedule_storage'] = "";
235
- }
236
- $schedule['remote_storage'] = $this->form_params['backup_params']['schedule_storage'];
237
- //$schedule['backup_type'] = $this->form_params['backup_params']['backup_type'];
238
-
239
- $schedule['params'] = json_encode($this->form_params);
240
-
241
- if (!isset($_POST['id'])) {
242
- $this->xcloner_database->insert(
243
- $this->xcloner_settings->get_table_prefix().'xcloner_scheduler',
244
- $schedule,
245
- array(
246
- '%s',
247
- '%s'
248
- )
249
- );
250
- } else {
251
- $this->xcloner_database->update(
252
- $this->xcloner_settings->get_table_prefix().'xcloner_scheduler',
253
- $schedule,
254
- array('id' => $_POST['id']),
255
- array(
256
- '%s',
257
- '%s'
258
- )
259
- );
260
- }
261
- if (isset($_POST['id'])) {
262
- $scheduler->update_cron_hook($_POST['id']);
263
- }
264
-
265
- if ($this->xcloner_database->last_error) {
266
- $response['error'] = 1;
267
- $response['error_message'] = $this->xcloner_database->last_error/*."--".$this->xcloner_database->last_query*/
268
- ;
269
- }
270
-
271
- $scheduler->update_wp_cron_hooks();
272
- $response['finished'] = 1;
273
-
274
- $this->send_response($response);
275
- }
276
-
277
- /*
278
- *
279
- * Backup Files API
280
- *
281
- */
282
- public function backup_files()
283
- {
284
- $return = array();
285
- $additional = array();
286
-
287
- $this->check_access();
288
-
289
- $params = json_decode(stripslashes($_POST['data']));
290
-
291
- $init = (int)$_POST['init'];
292
-
293
- if ($params === null) {
294
- return $this->send_response('{"status":false,"msg":"The post_data parameter must be valid JSON"}');
295
- }
296
-
297
- $this->process_params($params);
298
-
299
- $return['finished'] = 1;
300
-
301
- //$return = $this->archive_system->start_incremental_backup($this->form_params['backup_params'], $this->form_params['extra'], $init);
302
- try {
303
- $return = $this->archive_system->start_incremental_backup(
304
- $this->form_params['backup_params'],
305
- $this->form_params['extra'],
306
- $init
307
- );
308
- } catch (Exception $e) {
309
- $return = array();
310
- $return['error'] = true;
311
- $return['status'] = 500;
312
- $return['error_message'] = $e->getMessage();
313
-
314
- return $this->send_response($return, $hash = 1);
315
- }
316
-
317
- if ($return['finished']) {
318
- $return['extra']['backup_parent'] = $this->archive_system->get_archive_name_with_extension();
319
- if ($this->xcloner_file_system->is_part($this->archive_system->get_archive_name_with_extension())) {
320
- $return['extra']['backup_parent'] = $this->archive_system->get_archive_name_multipart();
321
- }
322
- }
323
-
324
- $data = $return;
325
-
326
- //check if backup is finished
327
- if ($return['finished']) {
328
- if (isset($this->form_params['backup_params']['email_notification']) and $to = $this->form_params['backup_params']['email_notification']) {
329
- try {
330
- $from = "";
331
- $subject = "";
332
- $additional['lines_total'] = $return['extra']['lines_total'];
333
- $this->archive_system->send_notification(
334
- $to,
335
- $from,
336
- $subject,
337
- $return['extra']['backup_parent'],
338
- $this->form_params,
339
- "",
340
- $additional
341
- );
342
- } catch (Exception $e) {
343
- $this->logger->error($e->getMessage());
344
- }
345
- }
346
- $this->xcloner_file_system->remove_tmp_filesystem();
347
- }
348
-
349
- return $this->send_response($data, $hash = 1);
350
- }
351
-
352
- /*
353
- *
354
- * Backup Database API
355
- *
356
- */
357
- public function backup_database()
358
- {
359
- $data = array();
360
-
361
- $this->check_access();
362
-
363
- $params = json_decode(stripslashes($_POST['data']));
364
-
365
- $init = (int)$_POST['init'];
366
-
367
- if ($params === null) {
368
- return $this->send_response('{"status":false,"msg":"The post_data parameter must be valid JSON"}');
369
- }
370
-
371
- $this->process_params($params);
372
-
373
- //$xcloner_database = $this->init_db();
374
- $return = $this->xcloner_database->start_database_recursion(
375
- $this->form_params['database'],
376
- $this->form_params['extra'],
377
- $init
378
- );
379
-
380
- if (isset($return['error']) and $return['error']) {
381
- $data['finished'] = 1;
382
- } else {
383
- $data['finished'] = $return['finished'];
384
- }
385
-
386
- $data['extra'] = $return;
387
-
388
- return $this->send_response($data, $hash = 1);
389
- }
390
-
391
- /*
392
- *
393
- * Scan Filesystem API
394
- *
395
- */
396
- public function scan_filesystem()
397
- {
398
- $data = array();
399
-
400
- $this->check_access();
401
-
402
- $params = json_decode(stripslashes($_POST['data']));
403
-
404
- $init = (int)$_POST['init'];
405
-
406
- if ($params === null) {
407
- $this->send_response('{"status":false,"msg":"The post_data profile parameter must be valid JSON"}');
408
- }
409
-
410
- $this->process_params($params);
411
-
412
- $this->xcloner_file_system->set_excluded_files($this->form_params['excluded_files']);
413
-
414
- $return = $this->xcloner_file_system->start_file_recursion($init);
415
-
416
- $data["finished"] = !$return;
417
- $data["total_files_num"] = $this->xcloner_file_system->get_scanned_files_num();
418
- $data["last_logged_file"] = $this->xcloner_file_system->last_logged_file();
419
- $data["total_files_size"] = sprintf(
420
- "%.2f",
421
- $this->xcloner_file_system->get_scanned_files_total_size() / (1024 * 1024)
422
- );
423
-
424
- return $this->send_response($data, $hash = 1);
425
- }
426
-
427
- /*
428
- *
429
- * Process params sent by the user
430
- *
431
- */
432
- private function process_params($params)
433
- {
434
- if ($params && $params->processed) {
435
- $this->form_params = json_decode(json_encode((array)$params), true);
436
- return;
437
- }
438
- if (isset($params->hash)) {
439
- $this->xcloner_settings->set_hash($params->hash);
440
- }
441
-
442
- $this->form_params['extra'] = array();
443
- $this->form_params['backup_params'] = array();
444
-
445
- $this->form_params['database'] = array();
446
-
447
- if (isset($params->backup_params)) {
448
- foreach ($params->backup_params as $param) {
449
- $this->form_params['backup_params'][$param->name] = $this->xcloner_sanitization->sanitize_input_as_string($param->value);
450
- $this->logger->debug("Adding form parameter ".$param->name.".".$param->value."\n", array(
451
- 'POST',
452
- 'fields filter'
453
- ));
454
- }
455
- }
456
-
457
- $this->form_params['database'] = array();
458
-
459
- if (isset($params->table_params)) {
460
- foreach ($params->table_params as $param) {
461
- $this->form_params['database'][$param->parent][] = $this->xcloner_sanitization->sanitize_input_as_raw($param->id);
462
- $this->logger->debug("Adding database filter ".$param->parent.".".$param->id."\n", array(
463
- 'POST',
464
- 'database filter'
465
- ));
466
- }
467
- }
468
-
469
- $this->form_params['excluded_files'] = array();
470
- if (isset($params->files_params)) {
471
- foreach ($params->files_params as $param) {
472
- $this->form_params['excluded_files'][] = $this->xcloner_sanitization->sanitize_input_as_relative_path($param->id);
473
- }
474
-
475
- $unique_exclude_files = array();
476
-
477
- foreach ($params->files_params as $key => $param) {
478
- if (!in_array($param->parent, $this->form_params['excluded_files'])) {
479
- //$this->form_params['excluded_files'][] = $this->xcloner_sanitization->sanitize_input_as_relative_path($param->id);
480
- $unique_exclude_files[] = $param->id;
481
- $this->logger->debug("Adding file filter ".$param->id."\n", array(
482
- 'POST',
483
- 'exclude files filter'
484
- ));
485
- }
486
- }
487
- $this->form_params['excluded_files'] = (array)$unique_exclude_files;
488
- }
489
-
490
- //$this->form_params['excluded_files'] = array_merge($this->form_params['excluded_files'], $this->exclude_files_by_default);
491
-
492
- if (isset($params->extra)) {
493
- foreach ($params->extra as $key => $value) {
494
- $this->form_params['extra'][$key] = $this->xcloner_sanitization->sanitize_input_as_raw($value);
495
- }
496
- }
497
-
498
- if (isset($this->form_params['backup_params']['diff_start_date']) and $this->form_params['backup_params']['diff_start_date']) {
499
- $this->form_params['backup_params']['diff_start_date'] = strtotime($this->form_params['backup_params']['diff_start_date']);
500
- $this->xcloner_file_system->set_diff_timestamp_start($this->form_params['backup_params']['diff_start_date']);
501
- }
502
-
503
- return $this->xcloner_settings->get_hash();
504
- }
505
-
506
- /*
507
- *
508
- * Get file list for tree view API
509
- *
510
- */
511
- public function get_file_system_action()
512
- {
513
- $this->check_access();
514
-
515
- $folder = $this->xcloner_sanitization->sanitize_input_as_relative_path($_POST['id']);
516
-
517
- $data = array();
518
-
519
- if ($folder == "#") {
520
- $folder = "/";
521
- $data[] = array(
522
- 'id' => $folder,
523
- 'parent' => '#',
524
- 'text' => $this->xcloner_settings->get_xcloner_start_path(),
525
- //'children' => true,
526
- 'state' => array('selected' => false, 'opened' => true),
527
- 'icon' => plugin_dir_url(dirname(__FILE__))."/admin/assets/file-icon-root.png"
528
- );
529
- }
530
-
531
- try {
532
- $files = $this->xcloner_file_system->list_directory($folder);
533
- } catch (Exception $e) {
534
- print $e->getMessage();
535
- $this->logger->error($e->getMessage());
536
-
537
- return;
538
- }
539
-
540
- $type = array();
541
- foreach ($files as $key => $row) {
542
- $type[$key] = $row['type'];
543
- }
544
- array_multisort($type, SORT_ASC, $files);
545
-
546
- foreach ($files as $file) {
547
- $children = false;
548
- $text = $file['basename'];
549
-
550
- if ($file['type'] == "dir") {
551
- $children = true;
552
- } else {
553
- $text .= " (".$this->xcloner_requirements->file_format_size($file['size']).")";
554
- }
555
-
556
- if ($this->xcloner_file_system->is_excluded($file)) {
557
- $selected = true;
558
- } else {
559
- $selected = false;
560
- }
561
-
562
- $data[] = array(
563
- 'id' => $file['path'],
564
- 'parent' => $folder,
565
- 'text' => $text,
566
- //'title' => "test",
567
- 'children' => $children,
568
- 'state' => array('selected' => $selected, 'opened' => false, "checkbox_disabled" => $selected),
569
- 'icon' => plugin_dir_url(dirname(__FILE__))."/admin/assets/file-icon-".strtolower(substr(
570
- $file['type'],
571
- 0,
572
- 1
573
- )).".png"
574
- );
575
- }
576
-
577
-
578
- return $this->send_response($data, 0);
579
- }
580
-
581
- /*
582
- *
583
- * Get databases/tables list for frontend tree display API
584
- *
585
- */
586
- public function get_database_tables_action()
587
- {
588
- $this->check_access();
589
-
590
- $database = $this->xcloner_sanitization->sanitize_input_as_raw($_POST['id']);
591
-
592
- $data = array();
593
-
594
- $xcloner_backup_only_wp_tables = $this->xcloner_settings->get_xcloner_option('xcloner_backup_only_wp_tables');
595
-
596
- if ($database == "#") {
597
- try {
598
- $return = $this->xcloner_database->get_all_databases();
599
- } catch (Exception $e) {
600
- $this->logger->error($e->getMessage());
601
- }
602
-
603
- foreach ($return as $database) {
604
- if ($xcloner_backup_only_wp_tables and $database['name'] != $this->xcloner_settings->get_db_database()) {
605
- continue;
606
- }
607
-
608
- $state = array();
609
-
610
- if ($database['name'] == $this->xcloner_settings->get_db_database()) {
611
- $state['selected'] = true;
612
- if ($database['num_tables'] < 25) {
613
- $state['opened'] = false;
614
- }
615
- }
616
-
617
- $data[] = array(
618
- 'id' => $database['name'],
619
- 'parent' => '#',
620
- 'text' => $database['name']." (".(int)$database['num_tables'].")",
621
- 'children' => true,
622
- 'state' => $state,
623
- 'icon' => plugin_dir_url(dirname(__FILE__))."/admin/assets/database-icon.png"
624
- );
625
- }
626
- } else {
627
- try {
628
- $return = $this->xcloner_database->list_tables($database, "", 1);
629
- } catch (Exception $e) {
630
- $this->logger->error($e->getMessage());
631
- }
632
-
633
- foreach ($return as $table) {
634
- $state = array();
635
-
636
- if ($xcloner_backup_only_wp_tables and !stristr(
637
- $table['name'],
638
- $this->xcloner_settings->get_table_prefix()
639
- )) {
640
- continue;
641
- }
642
-
643
- if (isset($database['name']) and $database['name'] == $this->xcloner_settings->get_db_database()) {
644
- $state = array('selected' => true);
645
- }
646
-
647
- $data[] = array(
648
- 'id' => $database.".".$table['name'],
649
- 'parent' => $database,
650
- 'text' => $table['name']." (".(int)$table['records'].")",
651
- 'children' => false,
652
- 'state' => $state,
653
- 'icon' => plugin_dir_url(dirname(__FILE__))."/admin/assets/table-icon.png"
654
- );
655
- }
656
- }
657
-
658
- return $this->send_response($data, 0);
659
- }
660
-
661
- /*
662
- *
663
- * Get schedule by id API
664
- *
665
- */
666
- public function get_schedule_by_id()
667
- {
668
- $this->check_access();
669
-
670
- $schedule_id = $this->xcloner_sanitization->sanitize_input_as_int($_GET['id']);
671
- $scheduler = $this->xcloner_scheduler;
672
- $data = $scheduler->get_schedule_by_id($schedule_id);
673
-
674
- $data['start_at'] = date(
675
- "Y-m-d H:i",
676
- strtotime($data['start_at']) + ($this->xcloner_settings->get_xcloner_option('gmt_offset') * HOUR_IN_SECONDS)
677
- );
678
- if (isset($data['backup_params']->diff_start_date) && $data['backup_params']->diff_start_date != "") {
679
- $data['backup_params']->diff_start_date = date("Y-m-d", ($data['backup_params']->diff_start_date));
680
- }
681
-
682
- return $this->send_response($data);
683
- }
684
-
685
- /*
686
- *
687
- * Get Schedule list API
688
- *
689
- */
690
- public function get_scheduler_list()
691
- {
692
- $return = array();
693
-
694
- $this->check_access();
695
-
696
- $scheduler = $this->xcloner_scheduler;
697
- $data = $scheduler->get_scheduler_list();
698
- $return['data'] = array();
699
-
700
- foreach ($data as $res) {
701
- $action = "<a href=\"#".$res->id."\" class=\"edit\" title='Edit'> <i class=\"material-icons \">edit</i></a>
702
- <a href=\"#" . $res->id."\" class=\"delete\" title='Delete'><i class=\"material-icons \">delete</i></a>";
703
- if ($res->status) {
704
- $status = '<i class="material-icons active status">timer</i>';
705
- } else {
706
- $status = '<i class="material-icons status inactive">timer_off</i>';
707
- }
708
-
709
- $next_run_time = wp_next_scheduled('xcloner_scheduler_'.$res->id, array($res->id));
710
-
711
- $next_run = date($this->xcloner_settings->get_xcloner_option('date_format')." ".$this->xcloner_settings->get_xcloner_option('time_format'), $next_run_time);
712
-
713
- $remote_storage = $res->remote_storage;
714
-
715
- if (!$next_run_time >= time()) {
716
- $next_run = " ";
717
- }
718
-
719
- if (trim($next_run)) {
720
- $date_text = date(
721
- $this->xcloner_settings->get_xcloner_option('date_format')." ".$this->xcloner_settings->get_xcloner_option('time_format'),
722
- $next_run_time + ($this->xcloner_settings->get_xcloner_option('gmt_offset') * HOUR_IN_SECONDS)
723
- );
724
-
725
- if ($next_run_time >= time()) {
726
- $next_run = "in ".human_time_diff($next_run_time, time());
727
- } else {
728
- $next_run = __("executed", 'xcloner-backup-and-restore');
729
- }
730
-
731
- $next_run = "<a href='#' title='".$date_text."'>".$next_run."</a>";
732
- //$next_run .=" ($date_text)";
733
- }
734
-
735
- $backup_text = "";
736
- $backup_size = "";
737
- $backup_time = "";
738
-
739
- if ($res->last_backup) {
740
- if ($this->xcloner_file_system->get_storage_filesystem()->has($res->last_backup)) {
741
- $metadata = $this->xcloner_file_system->get_storage_filesystem()->getMetadata($res->last_backup);
742
- $backup_size = size_format($this->xcloner_file_system->get_backup_size($res->last_backup));
743
- $backup_time = date(
744
- $this->xcloner_settings->get_xcloner_option('date_format')." ".$this->xcloner_settings->get_xcloner_option('time_format'),
745
- $metadata['timestamp'] + ($this->xcloner_settings->get_xcloner_option('gmt_offset') * HOUR_IN_SECONDS)
746
- );
747
- }
748
-
749
- $backup_text = "<span title='".$backup_time."' class='shorten_string'>".$res->last_backup." (".$backup_size.")</span>";
750
- }
751
-
752
- $schedules = $this->xcloner_scheduler->get_available_intervals();
753
-
754
- if (isset($schedules[$res->recurrence])) {
755
- $res->recurrence = $schedules[$res->recurrence]['display'];
756
- }
757
-
758
- $return['data'][] = array(
759
- $res->id,
760
- $res->name,
761
- $res->recurrence, /*$res->start_at,*/
762
- $next_run,
763
- $remote_storage,
764
- $backup_text,
765
- $status,
766
- $action
767
- );
768
- }
769
-
770
- return $this->send_response($return, 0);
771
- }
772
-
773
- /*
774
- *
775
- * Delete Schedule by ID API
776
- *
777
- */
778
- public function delete_schedule_by_id()
779
- {
780
- $data = array();
781
-
782
- $this->check_access();
783
-
784
- $schedule_id = $this->xcloner_sanitization->sanitize_input_as_int($_GET['id']);
785
- $scheduler = $this->xcloner_scheduler;
786
- $data['finished'] = $scheduler->delete_schedule_by_id($schedule_id);
787
-
788
- return $this->send_response($data);
789
- }
790
-
791
- /*
792
- *
793
- * Delete backup by name from the storage path
794
- *
795
- */
796
- public function delete_backup_by_name()
797
- {
798
- $data = array();
799
-
800
- $this->check_access();
801
-
802
- $backup_name = $this->xcloner_sanitization->sanitize_input_as_string($_POST['name']);
803
- $storage_selection = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_selection']);
804
-
805
- $data['finished'] = $this->xcloner_file_system->delete_backup_by_name($backup_name, $storage_selection);
806
-
807
- return $this->send_response($data);
808
- }
809
-
810
- /**
811
- * API Incremental Backup Encryption Method
812
- */
813
- public function backup_encryption()
814
- {
815
- $this->check_access();
816
-
817
- $backup_parts = array();
818
- $return = array();
819
-
820
-
821
- if (isset($_POST['data'])) {
822
- $params = json_decode(stripslashes($_POST['data']));
823
-
824
- $this->process_params($params);
825
- $source_backup_file = $this->xcloner_sanitization->sanitize_input_as_string($this->form_params['extra']['backup_parent']);
826
-
827
- if (isset($this->form_params['extra']['start'])) {
828
- $start = $this->xcloner_sanitization->sanitize_input_as_int($this->form_params['extra']['start']);
829
- } else {
830
- $start = 0;
831
- }
832
-
833
- if (isset($this->form_params['extra']['iv'])) {
834
- $iv = $this->xcloner_sanitization->sanitize_input_as_raw($this->form_params['extra']['iv']);
835
- } else {
836
- $iv = "";
837
- }
838
-
839
- if (isset($this->form_params['extra']['part'])) {
840
- $return['part'] = (int)$this->xcloner_sanitization->sanitize_input_as_int($this->form_params['extra']['part']);
841
- } else {
842
- $return['part'] = 0;
843
- }
844
- } else {
845
- $source_backup_file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
846
- $start = $this->xcloner_sanitization->sanitize_input_as_int($_POST['start']);
847
- $iv = $this->xcloner_sanitization->sanitize_input_as_raw($_POST['iv']);
848
- $return['part'] = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['part']);
849
- }
850
-
851
- $backup_file = $source_backup_file;
852
-
853
- if ($this->xcloner_file_system->is_multipart($backup_file)) {
854
- $backup_parts = $this->xcloner_file_system->get_multipart_files($backup_file);
855
- $backup_file = $backup_parts[$return['part']];
856
- }
857
-
858
- $return['processing_file'] = $backup_file;
859
- $return['total_size'] = filesize($this->xcloner_settings->get_xcloner_store_path().DS.$backup_file);
860
-
861
- try {
862
- $this->logger->info(json_encode($_POST));
863
- $this->logger->info($iv);
864
- $return = array_merge(
865
- $return,
866
- $this->xcloner_encryption->encrypt_file($backup_file, "", "", $start, base64_decode($iv))
867
- );
868
- } catch (\Exception $e) {
869
- $return['error'] = true;
870
- $return['message'] = $e->getMessage();
871
- $return['error_message'] = $e->getMessage();
872
- }
873
-
874
- //echo strlen($return['iv']);exit;
875
-
876
- if (isset($return['finished']) && $return['finished']) {
877
- if ($this->xcloner_file_system->is_multipart($source_backup_file)) {
878
- $return['start'] = 0;
879
-
880
- ++$return['part'];
881
-
882
- if ($return['part'] < sizeof($backup_parts)) {
883
- $return['finished'] = 0;
884
- }
885
- }
886
- }
887
-
888
- if (isset($_POST['data'])) {
889
- $return['extra'] = array_merge($this->form_params['extra'], $return);
890
- }
891
-
892
- $this->send_response($return, 0);
893
- }
894
-
895
- /**
896
- * API Incremental Backup Decryption Method
897
- */
898
- public function backup_decryption()
899
- {
900
- $this->check_access();
901
-
902
- $backup_parts = array();
903
- $return = array();
904
-
905
- $source_backup_file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
906
- $start = $this->xcloner_sanitization->sanitize_input_as_int($_POST['start']);
907
- $iv = $this->xcloner_sanitization->sanitize_input_as_raw($_POST['iv']);
908
- $decryption_key = $this->xcloner_sanitization->sanitize_input_as_raw($_POST['decryption_key']);
909
- ;
910
- $return['part'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['part']);
911
-
912
- $backup_file = $source_backup_file;
913
-
914
- if ($this->xcloner_file_system->is_multipart($backup_file)) {
915
- $backup_parts = $this->xcloner_file_system->get_multipart_files($backup_file);
916
- $backup_file = $backup_parts[$return['part']];
917
- }
918
-
919
- $return['processing_file'] = $backup_file;
920
- $return['total_size'] = filesize($this->xcloner_settings->get_xcloner_store_path().DS.$backup_file);
921
-
922
- try {
923
- $return = array_merge(
924
- $return,
925
- $this->xcloner_encryption->decrypt_file($backup_file, "", $decryption_key, $start, base64_decode($iv))
926
- );
927
- } catch (\Exception $e) {
928
- $return['error'] = true;
929
- $return['message'] = $e->getMessage();
930
- }
931
-
932
- if ($return['finished']) {
933
- if ($this->xcloner_file_system->is_multipart($source_backup_file)) {
934
- $return['start'] = 0;
935
-
936
- ++$return['part'];
937
-
938
- if ($return['part'] < sizeof($backup_parts)) {
939
- $return['finished'] = 0;
940
- }
941
- }
942
- }
943
-
944
- $this->send_response($return, 0);
945
- }
946
-
947
- public function get_manage_backups_list()
948
- {
949
- $this->check_access();
950
-
951
- $return = array(
952
- "data" => array()
953
- );
954
-
955
- $storage_selection = "";
956
-
957
- if (isset($_GET['storage_selection']) and $_GET['storage_selection']) {
958
- $storage_selection = $this->xcloner_sanitization->sanitize_input_as_string($_GET['storage_selection']);
959
- }
960
- $available_storages = $this->xcloner_remote_storage->get_available_storages();
961
-
962
- try {
963
- $backup_list = $this->xcloner_file_system->get_backup_archives_list($storage_selection);
964
- }catch(Exception $e){
965
- $this->send_response($return, 0);
966
- return;
967
- }
968
-
969
- $i = -1;
970
- foreach ($backup_list as $file_info):?>
971
- <?php
972
- if ($storage_selection == "gdrive") {
973
- $file_info['path'] = $file_info['filename'].".".$file_info['extension'];
974
- }
975
- $file_exists_on_local_storage = true;
976
-
977
- if ($storage_selection) {
978
- if (!$this->xcloner_file_system->get_storage_filesystem()->has($file_info['path'])) {
979
- $file_exists_on_local_storage = false;
980
- }
981
- } ?>
982
- <?php if (!isset($file_info['parent'])): ?>
983
-
984
- <?php ob_start(); ?>
985
- <p>
986
- <label for="checkbox_<?php echo $i ?>">
987
- <input name="backup[]" value="<?php echo $file_info['basename'] ?>" type="checkbox"
988
- id="checkbox_<?php echo ++$i ?>">
989
- <span>&nbsp;</span>
990
- </label>
991
- </p>
992
- <?php
993
- $return['data'][$i][] = ob_get_contents();
994
- ob_end_clean(); ?>
995
-
996
- <?php ob_start(); ?>
997
- <span class=""><?php echo $file_info['path'] ?></span>
998
- <?php if (!$file_exists_on_local_storage): ?>
999
- <a href="#"
1000
- title="<?php echo __(
1001
- "File does not exists on local storage",
1002
- "xcloner-backup-and-restore"
1003
- ) ?>"><i
1004
- class="material-icons backup_warning">warning</i></a>
1005
- <?php endif ?>
1006
- <?php
1007
- if (isset($file_info['childs']) and is_array($file_info['childs'])):
1008
- ?>
1009
- <a href="#" title="expand" class="expand-multipart add"><i
1010
- class="material-icons">add</i></a>
1011
- <a href="#" title="collapse" class="expand-multipart remove"><i class="material-icons">remove</i></a>
1012
- <ul class="multipart">
1013
- <?php foreach ($file_info['childs'] as $child): ?>
1014
- <li>
1015
- <?php echo $child[0] ?> (<?php echo esc_html(size_format($child[2])) ?>)
1016
- <?php
1017
- $child_exists_on_local_storage = true;
1018
- if ($storage_selection) {
1019
- if (!$this->xcloner_file_system->get_storage_filesystem()->has($child[0])) {
1020
- $child_exists_on_local_storage = false;
1021
- }
1022
- } ?>
1023
- <?php if (!$child_exists_on_local_storage): ?>
1024
- <a href="#"
1025
- title="<?php echo __(
1026
- "File does not exists on local storage",
1027
- "xcloner-backup-and-restore"
1028
- ) ?>"><i
1029
- class="material-icons backup_warning">warning</i></a>
1030
- <?php endif ?>
1031
- <?php if (!$storage_selection) : ?>
1032
- <a href="#<?php echo $child[0]; ?>" class="download"
1033
- title="Download Backup"><i class="material-icons">file_download</i></a>
1034
-
1035
- <?php if ($this->xcloner_encryption->is_encrypted_file($child[0])) :?>
1036
- <a href="#<?php echo $child[0] ?>" class="backup-decryption"
1037
- title="<?php echo __('Backup Decryption', 'xcloner-backup-and-restore') ?>">
1038
- <i class="material-icons">enhanced_encryption</i>
1039
- </a>
1040
- <?php else: ?>
1041
- <a href="#<?php echo $child[0] ?>" class="list-backup-content"
1042
- title="<?php echo __(
1043
- 'List Backup Content',
1044
- 'xcloner-backup-and-restore'
1045
- ) ?>"><i
1046
- class="material-icons">folder_open</i></a>
1047
-
1048
- <a href="#<?php echo $child[0] ?>" class="backup-encryption"
1049
- title="<?php echo __('Backup Encryption', 'xcloner-backup-and-restore') ?>">
1050
- <i class="material-icons">no_encryption</i>
1051
- </a>
1052
- <?php endif?>
1053
-
1054
- <?php elseif ($storage_selection != "gdrive" && !$this->xcloner_file_system->get_storage_filesystem()->has($child[0])): ?>
1055
- <a href="#<?php echo $child[0] ?>" class="copy-remote-to-local"
1056
- title="<?php echo __(
1057
- 'Push Backup To Local Storage',
1058
- 'xcloner-backup-and-restore'
1059
- ) ?>"><i
1060
- class="material-icons">file_upload</i></a>
1061
- <?php endif ?>
1062
- </li>
1063
- <?php endforeach; ?>
1064
- </ul>
1065
- <?php endif; ?>
1066
- <?php
1067
- $return['data'][$i][] = ob_get_contents();
1068
- ob_end_clean(); ?>
1069
- <?php ob_start(); ?>
1070
- <?php if (isset($file_info['timestamp'])) {
1071
- echo date("Y-m-d H:i", $file_info['timestamp']);
1072
- } ?>
1073
- <?php
1074
- $return['data'][$i][] = ob_get_contents();
1075
- ob_end_clean(); ?>
1076
-
1077
- <?php ob_start(); ?>
1078
- <?php echo esc_html(size_format($file_info['size'])) ?>
1079
- <?php
1080
- $return['data'][$i][] = ob_get_contents();
1081
- ob_end_clean(); ?>
1082
-
1083
- <?php ob_start(); ?>
1084
- <?php if (!$storage_selection): ?>
1085
- <a href="#<?php echo $file_info['basename']; ?>" class="download"
1086
- title="<?php echo __('Download Backup', 'xcloner-backup-and-restore') ?>"><i
1087
- class="material-icons">file_download</i></a>
1088
-
1089
- <?php if (sizeof($available_storages)): ?>
1090
- <a href="#<?php echo $file_info['basename'] ?>" class="cloud-upload"
1091
- title="<?php echo __(
1092
- 'Send Backup To Remote Storage',
1093
- 'xcloner-backup-and-restore'
1094
- ) ?>"><i
1095
- class="material-icons">cloud_upload</i></a>
1096
- <?php endif ?>
1097
- <?php
1098
- $basename = $file_info['basename'];
1099
- if (isset($file_info['childs']) and sizeof($file_info['childs'])) {
1100
- $basename = $file_info['childs'][0][0];
1101
- } ?>
1102
- <?php if ($this->xcloner_encryption->is_encrypted_file($basename)) :?>
1103
- <a href="#<?php echo $file_info['basename'] ?>" class="backup-decryption"
1104
- title="<?php echo __('Backup Decryption', 'xcloner-backup-and-restore') ?>">
1105
- <i class="material-icons">enhanced_encryption</i>
1106
- </a>
1107
- <?php else: ?>
1108
- <a href="#<?php echo $file_info['basename'] ?>" class="list-backup-content"
1109
- title="<?php echo __('List Backup Content', 'xcloner-backup-and-restore') ?>"><i
1110
- class="material-icons">folder_open</i></a>
1111
-
1112
- <a href="#<?php echo $file_info['basename'] ?>" class="backup-encryption"
1113
- title="<?php echo __('Backup Encryption', 'xcloner-backup-and-restore') ?>">
1114
- <i class="material-icons">no_encryption</i>
1115
- </a>
1116
- <?php endif?>
1117
- <?php endif; ?>
1118
-
1119
- <a href="#<?php echo $file_info['basename'] ?>" class="delete"
1120
- title="<?php echo __('Delete Backup', 'xcloner-backup-and-restore') ?>">
1121
- <i class="material-icons">delete</i>
1122
- </a>
1123
- <?php if ($storage_selection and !$file_exists_on_local_storage): ?>
1124
- <a href="#<?php echo $file_info['basename']; ?>" class="copy-remote-to-local"
1125
- title="<?php echo __('Push Backup To Local Storage', 'xcloner-backup-and-restore') ?>"><i
1126
- class="material-icons">file_upload</i></a>
1127
- <?php endif ?>
1128
-
1129
- <?php
1130
- $return['data'][$i][] = ob_get_contents();
1131
- ob_end_clean(); ?>
1132
-
1133
- <?php endif ?>
1134
- <?php endforeach ?>
1135
- <?php
1136
- $this->send_response($return, 0);
1137
- }
1138
-
1139
- /**
1140
- * API method to list internal backup files
1141
- */
1142
- public function list_backup_files()
1143
- {
1144
- $this->check_access();
1145
-
1146
- $backup_parts = array();
1147
- $return = array();
1148
-
1149
- $source_backup_file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
1150
-
1151
- $start = $this->xcloner_sanitization->sanitize_input_as_int($_POST['start']);
1152
- $return['part'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['part']);
1153
-
1154
- $backup_file = $source_backup_file;
1155
-
1156
- if ($this->xcloner_file_system->is_multipart($backup_file)) {
1157
- $backup_parts = $this->xcloner_file_system->get_multipart_files($backup_file);
1158
- $backup_file = $backup_parts[$return['part']];
1159
- }
1160
-
1161
- if ($this->xcloner_encryption->is_encrypted_file($backup_file)) {
1162
- $return['error'] = true;
1163
- $return['message'] = __("Backup archive is encrypted, please decrypt it first before you can list it's content.", "xcloner-backup-and-restore");
1164
- $this->send_response($return, 0);
1165
- }
1166
-
1167
- try {
1168
- $tar = $this->archive_system;
1169
- $tar->open($this->xcloner_settings->get_xcloner_store_path().DS.$backup_file, $start);
1170
-
1171
- $data = $tar->contents($this->xcloner_settings->get_xcloner_option('xcloner_files_to_process_per_request'));
1172
- } catch (Exception $e) {
1173
- $return['error'] = true;
1174
- $return['message'] = $e->getMessage();
1175
- $this->send_response($return, 0);
1176
- }
1177
-
1178
- $return['files'] = array();
1179
- $return['finished'] = 1;
1180
- $return['total_size'] = filesize($this->xcloner_settings->get_xcloner_store_path().DS.$backup_file);
1181
- $i = 0;
1182
-
1183
- if (isset($data['extracted_files']) and is_array($data['extracted_files'])) {
1184
- foreach ($data['extracted_files'] as $file) {
1185
- $return['files'][$i]['path'] = $file->getPath();
1186
- $return['files'][$i]['size'] = $file->getSize();
1187
- $return['files'][$i]['mtime'] = date(
1188
- $this->xcloner_settings->get_xcloner_option('date_format')." ".$this->xcloner_settings->get_xcloner_option('time_format'),
1189
- $file->getMtime()
1190
- );
1191
-
1192
- $i++;
1193
- }
1194
- }
1195
-
1196
- if (isset($data['start'])) {
1197
- $return['start'] = $data['start'];
1198
- $return['finished'] = 0;
1199
- } else {
1200
- if ($this->xcloner_file_system->is_multipart($source_backup_file)) {
1201
- $return['start'] = 0;
1202
-
1203
- ++$return['part'];
1204
-
1205
- if ($return['part'] < sizeof($backup_parts)) {
1206
- $return['finished'] = 0;
1207
- }
1208
- }
1209
- }
1210
-
1211
- $this->send_response($return, 0);
1212
- }
1213
-
1214
- /*
1215
- * Copy remote backup to local storage
1216
- */
1217
- public function copy_backup_remote_to_local()
1218
- {
1219
- $this->check_access();
1220
-
1221
- $backup_file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
1222
- $storage_type = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_type']);
1223
-
1224
- $xcloner_remote_storage = $this->get_xcloner_container()->get_xcloner_remote_storage();
1225
-
1226
- $return = array();
1227
-
1228
- try {
1229
- if (method_exists($xcloner_remote_storage, "copy_backup_remote_to_local")) {
1230
- $return = call_user_func_array(array(
1231
- $xcloner_remote_storage,
1232
- "copy_backup_remote_to_local"
1233
- ), array($backup_file, $storage_type));
1234
- }
1235
- } catch (Exception $e) {
1236
- $return['error'] = 1;
1237
- $return['message'] = $e->getMessage();
1238
- }
1239
-
1240
- if (!$return) {
1241
- $return['error'] = 1;
1242
- $return['message'] = "Upload failed, please check the error log for more information!";
1243
- }
1244
-
1245
-
1246
- $this->send_response($return, 0);
1247
- }
1248
-
1249
- /*
1250
- *
1251
- * Upload backup to remote API
1252
- *
1253
- */
1254
- public function upload_backup_to_remote()
1255
- {
1256
- $this->check_access();
1257
-
1258
- $return = array();
1259
-
1260
- $backup_file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
1261
- $storage_type = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_type']);
1262
- $delete_local_copy_after_transfer = $this->xcloner_sanitization->sanitize_input_as_string($_POST['delete_after_transfer']);
1263
-
1264
- $xcloner_remote_storage = $this->get_xcloner_container()->get_xcloner_remote_storage();
1265
-
1266
- try {
1267
- if (method_exists($xcloner_remote_storage, "upload_backup_to_storage")) {
1268
- $return = call_user_func_array(array(
1269
- $xcloner_remote_storage,
1270
- "upload_backup_to_storage"
1271
- ), array($backup_file, $storage_type, $delete_local_copy_after_transfer));
1272
- }
1273
- } catch (Exception $e) {
1274
- $return['error'] = 1;
1275
- $return['message'] = $e->getMessage();
1276
- }
1277
-
1278
- if (!$return) {
1279
- $return['error'] = 1;
1280
- $return['message'] = "Upload failed, please check the error log for more information!";
1281
- }
1282
-
1283
-
1284
- $this->send_response($return, 0);
1285
- }
1286
-
1287
- /*
1288
- *
1289
- * Remote Storage Status Save
1290
- *
1291
- */
1292
- public function remote_storage_save_status()
1293
- {
1294
- $this->check_access();
1295
-
1296
- $return = array();
1297
-
1298
- $xcloner_remote_storage = $this->get_xcloner_container()->get_xcloner_remote_storage();
1299
-
1300
- $return['finished'] = $xcloner_remote_storage->change_storage_status($_POST['id'], $_POST['value']);
1301
-
1302
- $this->send_response($return, 0);
1303
- }
1304
-
1305
-
1306
- public function download_restore_script()
1307
- {
1308
- $this->check_access();
1309
-
1310
- ob_end_clean();
1311
-
1312
- $adapter = new Local(dirname(__DIR__), LOCK_EX, '0001');
1313
- $xcloner_plugin_filesystem = new Filesystem($adapter, new Config([
1314
- 'disable_asserts' => true,
1315
- ]));
1316
-
1317
- /* Generate PHAR FILE
1318
- $file = 'restore/vendor.built';
1319
-
1320
- if(file_exists($file))
1321
- unlink($file);
1322
- $phar2 = new Phar($file, 0, 'vendor.phar');
1323
-
1324
- // add all files in the project, only include php files
1325
- $phar2->buildFromIterator(
1326
- new RecursiveIteratorIterator(
1327
- new RecursiveDirectoryIterator(__DIR__.'/vendor/')),
1328
- __DIR__);
1329
-
1330
- $phar2->setStub($phar2->createDefaultStub('vendor/autoload.php', 'vendor/autoload.php'));
1331
- * */
1332
-
1333
- $tmp_file = $this->xcloner_settings->get_xcloner_tmp_path().DS."xcloner-restore.tgz";
1334
-
1335
- $tar = $this->archive_system;
1336
- $tar->create($tmp_file);
1337
-
1338
- $tar->addFile(dirname(__DIR__)."/restore/vendor.build.txt", "vendor.phar");
1339
- //$tar->addFile(dirname(__DIR__)."/restore/vendor.tgz", "vendor.tgz");
1340
-
1341
- $files = $xcloner_plugin_filesystem->listContents("vendor/", true);
1342
- foreach ($files as $file) {
1343
- $tar->addFile(dirname(__DIR__).DS.$file['path'], $file['path']);
1344
- }
1345
-
1346
- $content = file_get_contents(dirname(__DIR__)."/restore/xcloner_restore.php");
1347
- $content = str_replace("define('AUTH_KEY', '');", "define('AUTH_KEY', '".md5(AUTH_KEY)."');", $content);
1348
-
1349
- $tar->addData("xcloner_restore.php", $content);
1350
-
1351
- $tar->close();
1352
-
1353
- if (file_exists($tmp_file)) {
1354
- header('Content-Description: File Transfer');
1355
- header('Content-Type: application/octet-stream');
1356
- header('Content-Disposition: attachment; filename="'.basename($tmp_file).'"');
1357
- header('Expires: 0');
1358
- header('Cache-Control: must-revalidate');
1359
- header('Pragma: public');
1360
- header('Content-Length: '.filesize($tmp_file));
1361
- readfile($tmp_file);
1362
- }
1363
-
1364
- try {
1365
- unlink($tmp_file);
1366
- } catch (Exception $e) {
1367
- //We are not interested in the error here
1368
- }
1369
-
1370
- die();
1371
- }
1372
-
1373
- /*
1374
- *
1375
- * Download backup by Name from the Storage Path
1376
- *
1377
- */
1378
- public function download_backup_by_name()
1379
- {
1380
- $this->check_access();
1381
-
1382
- ob_end_clean();
1383
-
1384
- $backup_name = $this->xcloner_sanitization->sanitize_input_as_string($_GET['name']);
1385
-
1386
-
1387
- $metadata = $this->xcloner_file_system->get_storage_filesystem()->getMetadata($backup_name);
1388
- $read_stream = $this->xcloner_file_system->get_storage_filesystem()->readStream($backup_name);
1389
-
1390
-
1391
- header('Pragma: public');
1392
- header('Expires: 0');
1393
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
1394
- header('Cache-Control: private', false);
1395
- header('Content-Transfer-Encoding: binary');
1396
- header('Content-Disposition: attachment; filename="'.$metadata['path'].'";');
1397
- header('Content-Type: application/octet-stream');
1398
- header('Content-Length: '.$metadata['size']);
1399
-
1400
- ob_end_clean();
1401
-
1402
- $chunkSize = 1024 * 1024;
1403
- while (!feof($read_stream)) {
1404
- $buffer = fread($read_stream, $chunkSize);
1405
- echo $buffer;
1406
- }
1407
- fclose($read_stream);
1408
-
1409
- wp_die();
1410
- }
1411
-
1412
- /*
1413
- * Restore upload backup
1414
- */
1415
- public function restore_upload_backup()
1416
- {
1417
- $this->check_access();
1418
-
1419
- $return = array();
1420
-
1421
- $return['part'] = 0;
1422
- $return['total_parts'] = 0;
1423
- $return['uploaded_size'] = 0;
1424
- $is_multipart = 0;
1425
-
1426
- $file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
1427
- $hash = $this->xcloner_sanitization->sanitize_input_as_string($_POST['hash']);
1428
-
1429
- if (isset($_POST['part'])) {
1430
- $return['part'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['part']);
1431
- }
1432
-
1433
- if (isset($_POST['uploaded_size'])) {
1434
- $return['uploaded_size'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['uploaded_size']);
1435
- }
1436
-
1437
- $start = $this->xcloner_sanitization->sanitize_input_as_string($_POST['start']);
1438
- $target_url = $this->xcloner_sanitization->sanitize_input_as_string($_POST['target_url']);
1439
-
1440
- $return['total_size'] = $this->xcloner_file_system->get_backup_size($file);
1441
-
1442
- if ($this->xcloner_file_system->is_multipart($file)) {
1443
- $backup_parts = $this->xcloner_file_system->get_multipart_files($file);
1444
-
1445
- $return['total_parts'] = sizeof($backup_parts) + 1;
1446
-
1447
- if ($return['part'] and isset($backup_parts[$return['part'] - 1])) {
1448
- $file = $backup_parts[$return['part'] - 1];
1449
- }
1450
-
1451
- $is_multipart = 1;
1452
- }
1453
-
1454
- try {
1455
- $xcloner_file_transfer = $this->get_xcloner_container()->get_xcloner_file_transfer();
1456
- $xcloner_file_transfer->set_target($target_url);
1457
- $return['start'] = $xcloner_file_transfer->transfer_file($file, $start, $hash);
1458
- } catch (Exception $e) {
1459
- $return = array();
1460
- $return['error'] = true;
1461
- $return['status'] = 500;
1462
- $return['message'] = "CURL communication error with the restore host. ".$e->getMessage();
1463
- $this->send_response($return, 0);
1464
- }
1465
-
1466
- $return['status'] = 200;
1467
-
1468
- //we have finished the upload
1469
- if (!$return['start'] and $is_multipart) {
1470
- $return['part']++;
1471
- $return['uploaded_size'] += $this->xcloner_file_system->get_storage_filesystem()->getSize($file);
1472
- }
1473
-
1474
- $this->send_response($return, 0);
1475
- }
1476
-
1477
- /*
1478
- * Restore backup
1479
- */
1480
- public function restore_backup()
1481
- {
1482
- $this->check_access();
1483
-
1484
- define("XCLONER_PLUGIN_ACCESS", 1);
1485
- include_once(dirname(__DIR__).DS."restore".DS."xcloner_restore.php");
1486
-
1487
- return;
1488
- }
1489
-
1490
- /*
1491
- *
1492
- * Send the json response back
1493
- *
1494
- */
1495
- private function send_response($data, $attach_hash = 1)
1496
- {
1497
- if ($attach_hash and null !== $this->xcloner_settings->get_hash()) {
1498
- $data['hash'] = $this->xcloner_settings->get_hash();
1499
- }
1500
-
1501
- if (ob_get_length()) {
1502
- //ob_clean();
1503
- }
1504
-
1505
- return wp_send_json($data);
1506
- }
1507
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-archive.php DELETED
@@ -1,1077 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner - Backup and Restore backup plugin for Wordpress
4
- *
5
- * class-xcloner-archive.php
6
- * @author Liuta Ovidiu <info@thinkovi.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
- * MA 02110-1301, USA.
22
- *
23
- * @link https://github.com/ovidiul/XCloner-Wordpress
24
- *
25
- * @modified 7/31/18 3:10 PM
26
- *
27
- */
28
-
29
- use splitbrain\PHPArchive\Tar;
30
- use splitbrain\PHPArchive\Archive;
31
- use splitbrain\PHPArchive\FileInfo;
32
-
33
- /**
34
- * Class responsible for adding files to Tar
35
- * Class Xcloner_Archive
36
- */
37
- class Xcloner_Archive extends Tar
38
- {
39
- /**
40
- * Process file size per API request
41
- * @var float|int
42
- */
43
- private $file_size_per_request_limit = 52428800; //50MB = 52428800; 1MB = 1048576
44
- /**
45
- * Files count to process per API request
46
- * @var int
47
- */
48
- private $files_to_process_per_request = 250; //block of 512 bytes
49
- /**
50
- * Compression level, 0-uncompressed, 9-maximum compression
51
- * @var int
52
- */
53
- private $compression_level = 0; //0-9 , 0 uncompressed
54
- /**
55
- * Split backup size limit
56
- * Create a new backup archive file once the set size is reached
57
- * @var float|int
58
- */
59
- private $xcloner_split_backup_limit = 2048; //2048MB
60
- /**
61
- * Number of processed bytes
62
- * @var int
63
- */
64
- private $processed_size_bytes = 0;
65
-
66
- /**
67
- * The backup name encryption suffix
68
- * @var string
69
- */
70
- private $encrypt_suffix = "-enc";
71
-
72
- /**
73
- * Archive name
74
- * @var string
75
- */
76
- private $archive_name;
77
- /**
78
- * @var Tar
79
- */
80
- private $backup_archive;
81
- /**
82
- * @var Xcloner_File_System
83
- */
84
- private $filesystem;
85
- /**
86
- * @var Xcloner_Logger
87
- */
88
- private $logger;
89
- /**
90
- * @var Xcloner_Settings
91
- */
92
- private $xcloner_settings;
93
-
94
- /**
95
- * [__construct description]
96
- * @param Xcloner $xcloner_container XCloner Container
97
- * @param string $archive_name Achive Name
98
- */
99
- public function __construct(Xcloner $xcloner_container, $archive_name = "")
100
- {
101
- $this->filesystem = $xcloner_container->get_xcloner_filesystem();
102
- $this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_archive");
103
- $this->xcloner_settings = $xcloner_container->get_xcloner_settings();
104
-
105
- if ($value = $this->xcloner_settings->get_xcloner_option('xcloner_size_limit_per_request')) {
106
- $this->file_size_per_request_limit = $value * 1024 * 1024;
107
- } //MB
108
-
109
- if ($value = $this->xcloner_settings->get_xcloner_option('xcloner_files_to_process_per_request')) {
110
- $this->files_to_process_per_request = $value;
111
- }
112
-
113
- if ($value = $this->xcloner_settings->get_xcloner_option('xcloner_backup_compression_level')) {
114
- $this->compression_level = $value;
115
- }
116
-
117
- if ($value = $this->xcloner_settings->get_xcloner_option('xcloner_split_backup_limit')) {
118
- $this->xcloner_split_backup_limit = $value;
119
- }
120
-
121
- $this->xcloner_split_backup_limit = $this->xcloner_split_backup_limit * 1024 * 1024; //transform to bytes
122
-
123
- if (isset($archive_name) && $archive_name) {
124
- $this->set_archive_name($archive_name);
125
- }
126
- }
127
-
128
- /*
129
- * Rename backup archive
130
- *
131
- * @param string $old_name
132
- * @param string $new_name
133
- *
134
- */
135
- public function rename_archive($old_name, $new_name)
136
- {
137
- $this->logger->info(sprintf("Renaming backup archive %s to %s", $old_name, $new_name));
138
- $storage_filesystem = $this->filesystem->get_storage_filesystem();
139
- $storage_filesystem->rename($old_name, $new_name);
140
- }
141
-
142
- /*
143
- *
144
- * Set the backup archive name
145
- *
146
- */
147
- public function set_archive_name($name = "", $part = 0, $encrypt_prefix = false)
148
- {
149
- $this->archive_name = $this->filesystem->process_backup_name($name);
150
-
151
- if ($encrypt_prefix) {
152
- $this->archive_name .= $this->encrypt_suffix;
153
- }
154
-
155
- if ($diff_timestamp_start = $this->filesystem->get_diff_timestamp_start()) {
156
- //$this->archive_name = $this->archive_name."-diff-".date("Y-m-d_H-i",$diff_timestamp_start);
157
- $new_name = $this->archive_name;
158
-
159
- if (!stristr($new_name, "-diff")) {
160
- $new_name = $this->archive_name."-diff".date("Y-m-d_H-i", $diff_timestamp_start);
161
- }
162
-
163
- $this->archive_name = $new_name;
164
- }
165
-
166
- if (isset($part) and $part) {
167
- $new_name = preg_replace('/-part(\d*)/', "-part".$part, $this->archive_name);
168
- if (!stristr($new_name, "-part")) {
169
- $new_name = $this->archive_name."-part".$part;
170
- }
171
-
172
- $this->archive_name = $new_name;
173
- }
174
-
175
- return $this;
176
- }
177
-
178
- /*
179
- *
180
- * Returns the backup archive name
181
- *
182
- * @return string archive name
183
- */
184
- public function get_archive_name()
185
- {
186
- return $this->archive_name;
187
- }
188
-
189
- /*
190
- *
191
- * Returns the multipart naming for the backup archive
192
- *
193
- * @return string multi-part backup name
194
- */
195
- public function get_archive_name_multipart()
196
- {
197
- $new_name = preg_replace('/-part(\d*)/', "", $this->archive_name);
198
- return $new_name."-multipart".$this->xcloner_settings->get_backup_extension_name(".csv");
199
- }
200
-
201
- /*
202
- *
203
- * Returns the full backup name including extension
204
- *
205
- */
206
- public function get_archive_name_with_extension()
207
- {
208
- return $this->archive_name.$this->xcloner_settings->get_backup_extension_name();
209
- }
210
-
211
- /*
212
- *
213
- * Send notification error by E-Mail
214
- *
215
- * @param $to
216
- * @param $from
217
- * @param $subject
218
- * @param $backup_name
219
- * @param $params
220
- * @param $error_message
221
- *
222
- * @return bool
223
- */
224
-
225
- /**
226
- * @param string $error_message
227
- */
228
- public function send_notification_error($to, $from, $subject, $backup_name, $params, $error_message)
229
- {
230
- $body = "";
231
- $body .= sprintf(__("Backup Site Url: %s"), get_site_url());
232
- $body .= "<br /><>";
233
-
234
- $body .= sprintf(__("Error Message: %s"), $error_message);
235
-
236
- $this->logger->info(sprintf("Sending backup error notification to %s", $to));
237
-
238
- $admin_email = $this->xcloner_settings->get_xcloner_option("admin_email");
239
-
240
- $headers = array('Content-Type: text/html; charset=UTF-8');
241
-
242
- if ($admin_email and $from) {
243
- $headers[] = 'From: '.$from.' <'.$admin_email.'>';
244
- }
245
-
246
- $return = wp_mail($to, $subject, $body, $headers);
247
-
248
- return $return;
249
- }
250
-
251
- /*
252
- *
253
- * Send backup archive notfication by E-Mail
254
- *
255
- * @param $to
256
- * @param $from
257
- * @param $subject
258
- * @param $backup_name
259
- * @param $params
260
- * @param string $error_message
261
- * @param array $additional
262
- *
263
- * @return bool
264
- */
265
- public function send_notification(
266
- $to,
267
- $from,
268
- $subject,
269
- $backup_name,
270
- $params,
271
- $error_message = "",
272
- $additional = array()
273
- ) {
274
- if (!$from) {
275
- $from = "XCloner Backup";
276
- }
277
-
278
- if (($error_message)) {
279
- return $this->send_notification_error($to, $from, $subject, $backup_name, $params, $error_message);
280
- }
281
-
282
- $params = (array)$params;
283
-
284
- if (!$subject) {
285
- $subject = sprintf(__("New backup generated %s"), $backup_name);
286
- }
287
-
288
- $body = sprintf(__("Generated Backup Size: %s"), size_format($this->filesystem->get_backup_size($backup_name)));
289
- $body .= "<br /><br />";
290
-
291
- if (isset($additional['lines_total'])) {
292
- $body .= sprintf(__("Total files added: %s"), $additional['lines_total']);
293
- $body .= "<br /><br />";
294
- }
295
-
296
- $backup_parts = $this->filesystem->get_multipart_files($backup_name);
297
-
298
- if (!$backups_counter = sizeof($backup_parts)) {
299
- $backups_counter = 1;
300
- }
301
-
302
- $body .= sprintf(__("Backup Parts: %s"), $backups_counter);
303
- $body .= "<br />";
304
-
305
- if (sizeof($backup_parts)) {
306
- $body .= implode("<br />", $backup_parts);
307
- $body .= "<br />";
308
- }
309
-
310
- $body .= "<br />";
311
-
312
- $body .= sprintf(__("Backup Site Url: %s"), get_site_url());
313
- $body .= "<br />";
314
-
315
- if (isset($params['backup_params']->backup_comments)) {
316
- $body .= __("Backup Comments: ").$params['backup_params']->backup_comments;
317
- $body .= "<br /><br />";
318
- }
319
-
320
- if ($this->xcloner_settings->get_xcloner_option('xcloner_enable_log')) {
321
- $body .= __("Latest 50 Log Lines: ")."<br />".implode(
322
- "<br />\n",
323
- $this->logger->getLastDebugLines(50)
324
- );
325
- }
326
-
327
- $attachments = $this->filesystem->get_backup_attachments();
328
-
329
- $attachments_archive = $this->xcloner_settings->get_xcloner_tmp_path().DS."info.tgz";
330
-
331
- $tar = $this;
332
- $tar->create($attachments_archive);
333
-
334
- foreach ($attachments as $key => $file) {
335
- $tar->addFile($file, basename($file));
336
- }
337
- $tar->close();
338
-
339
- $this->logger->info(sprintf("Sending backup notification to %s", $to));
340
-
341
- $admin_email = $this->xcloner_settings->get_xcloner_option("admin_email");
342
-
343
- $headers = array('Content-Type: text/html; charset=UTF-8', 'From: '.$from.' <'.$admin_email.'>');
344
-
345
- $return = wp_mail($to, $subject, $body, $headers, array($attachments_archive));
346
-
347
- return $return;
348
- }
349
-
350
- /*
351
- *
352
- * Incremental Backup method
353
- *
354
- */
355
- public function start_incremental_backup($backup_params, $extra_params, $init)
356
- {
357
- $return = array();
358
-
359
- if (!isset($extra_params['backup_part'])) {
360
- $extra_params['backup_part'] = 0;
361
- }
362
-
363
- $return['extra']['backup_part'] = $extra_params['backup_part'];
364
-
365
- if (isset($extra_params['backup_archive_name'])) {
366
- $this->set_archive_name($extra_params['backup_archive_name'], $return['extra']['backup_part']);
367
- } else {
368
- $encrypt = false;
369
- if (isset($backup_params['backup_encrypt']) && $backup_params['backup_encrypt']) {
370
- $encrypt = true;
371
- }
372
- $this->set_archive_name($backup_params['backup_name'], 0, $encrypt);
373
- }
374
-
375
- if (!$this->get_archive_name()) {
376
- $this->set_archive_name();
377
- }
378
-
379
- $this->backup_archive = $this;
380
- $this->backup_archive->setCompression($this->compression_level);
381
-
382
- $archive_info = $this->filesystem->get_storage_path_file_info($this->get_archive_name_with_extension());
383
-
384
- if ($init) {
385
- $this->logger->info(sprintf(__("Initializing the backup archive %s"), $this->get_archive_name()));
386
-
387
- $this->backup_archive->create($archive_info->getPath().DS.$archive_info->getFilename());
388
-
389
- $return['extra']['backup_init'] = 1;
390
- } else {
391
- $this->logger->info(sprintf(__("Opening for append the backup archive %s"), $this->get_archive_name()));
392
-
393
- $this->backup_archive->openForAppend($archive_info->getPath().DS.$archive_info->getFilename());
394
-
395
- $return['extra']['backup_init'] = 0;
396
- }
397
-
398
- $return['extra']['backup_archive_name'] = $this->get_archive_name();
399
- $return['extra']['backup_archive_name_full'] = $this->get_archive_name_with_extension();
400
-
401
- if (!isset($extra_params['start_at_line'])) {
402
- $extra_params['start_at_line'] = 0;
403
- }
404
-
405
- if (!isset($extra_params['start_at_byte'])) {
406
- $extra_params['start_at_byte'] = 0;
407
- }
408
-
409
- if (!$this->filesystem->get_tmp_filesystem()->has($this->filesystem->get_included_files_handler())) {
410
- $this->logger->error(sprintf(
411
- "Missing the includes file handler %s, aborting...",
412
- $this->filesystem->get_included_files_handler()
413
- ));
414
-
415
- $return['finished'] = 1;
416
- return $return;
417
- }
418
-
419
- $included_files_handler = $this->filesystem->get_included_files_handler(1);
420
-
421
- $file = new SplFileObject($included_files_handler);
422
-
423
- $file->seek(PHP_INT_MAX);
424
-
425
- $return['extra']['lines_total'] = ($file->key() - 1);
426
-
427
- //we skip the first CSV line with headers
428
- if (!$extra_params['start_at_line']) {
429
- $file->seek(1);
430
- } else {
431
- $file->seek($extra_params['start_at_line'] + 1);
432
- }
433
-
434
- $this->processed_size_bytes = 0;
435
-
436
- $counter = 0;
437
-
438
- $start_byte = $extra_params['start_at_byte'];
439
-
440
- $byte_limit = 0;
441
-
442
- while (!$file->eof() and $counter <= $this->files_to_process_per_request) {
443
- $current_line_str = $file->current();
444
-
445
- $line = str_getcsv($current_line_str);
446
-
447
- $relative_path = stripslashes($line[0]);
448
-
449
- $start_filesystem = "start_filesystem";
450
-
451
- if (isset($line[4])) {
452
- $start_filesystem = $line[4];
453
- }
454
-
455
- //$adapter = $this->filesystem->get_adapter($start_filesystem);
456
-
457
- if (!$relative_path || !$this->filesystem->get_filesystem($start_filesystem)->has($relative_path)) {
458
- if ($relative_path != "") {
459
- $this->logger->error(sprintf(
460
- "Could not add file %b to backup archive, file not found",
461
- $relative_path
462
- ));
463
- }
464
-
465
- $extra_params['start_at_line']++;
466
- $file->next();
467
- continue;
468
- }
469
-
470
- $file_info = $this->filesystem->get_filesystem($start_filesystem)->getMetadata($relative_path);
471
-
472
- if (!isset($file_info['size'])) {
473
- $file_info['size'] = 0;
474
- }
475
-
476
- if ($start_filesystem == "tmp_filesystem") {
477
- $file_info['archive_prefix_path'] = $this->xcloner_settings->get_xcloner_tmp_path_suffix();
478
- }
479
-
480
- $byte_limit = (int)$this->file_size_per_request_limit / 512;
481
-
482
- $append = 0;
483
-
484
- if ($file_info['size'] > $byte_limit * 512 or $start_byte) {
485
- $append = 1;
486
- }
487
-
488
- if (!isset($return['extra']['backup_size'])) {
489
- $return['extra']['backup_size'] = 0;
490
- }
491
-
492
- $return['extra']['backup_size'] = $archive_info->getSize();
493
-
494
- $estimated_new_size = $return['extra']['backup_size'] + $file_info['size'];
495
-
496
- //we create a new backup part if we reach the Split Achive Limit
497
- if ($this->xcloner_split_backup_limit and ($estimated_new_size > $this->xcloner_split_backup_limit) and (!$start_byte)) {
498
- $this->logger->info(sprintf(
499
- "Backup size limit %s bytes reached, file add estimate %s, attempt to create a new archive ",
500
- $this->xcloner_split_backup_limit,
501
- $estimated_new_size
502
- ));
503
- list($archive_info, $return['extra']['backup_part']) = $this->create_new_backup_part($return['extra']['backup_part']);
504
-
505
- if ($file_info['size'] > $this->xcloner_split_backup_limit) {
506
- $this->logger->info(sprintf(
507
- "Excluding %s file as it's size(%s) is bigger than the backup split limit of %s and it won't fit a single backup file",
508
- $file_info['path'],
509
- $file_info['size'],
510
- $this->xcloner_split_backup_limit
511
- ));
512
- $extra_params['start_at_line']++;
513
- }
514
-
515
- $return['extra']['start_at_line'] = $extra_params['start_at_line'];
516
- $return['extra']['start_at_byte'] = 0;
517
-
518
- $return['finished'] = 0;
519
-
520
- return $return;
521
- }
522
-
523
- list($bytes_wrote, $last_position) = $this->add_file_to_archive(
524
- $file_info,
525
- $start_byte,
526
- $byte_limit,
527
- $append,
528
- $start_filesystem
529
- );
530
- $this->processed_size_bytes += $bytes_wrote;
531
-
532
- //echo" - processed ".$this->processed_size_bytes." bytes ".$this->file_size_per_request_limit." last_position:".$last_position." \n";
533
- $return['extra']['processed_file'] = $file_info['path'];
534
- $return['extra']['processed_file_size'] = $file_info['size'];
535
- $return['extra']['backup_size'] = $archive_info->getSize();
536
-
537
- if ($last_position > 0) {
538
- $start_byte = $last_position;
539
- } else {
540
- $extra_params['start_at_line']++;
541
- $file->next();
542
- $start_byte = 0;
543
- $counter++;
544
- }
545
-
546
- if ($this->processed_size_bytes >= $this->file_size_per_request_limit) {
547
- clearstatcache();
548
- $return['extra']['backup_size'] = $archive_info->getSize();
549
-
550
- $return['finished'] = 0;
551
- $return['extra']['start_at_line'] = $extra_params['start_at_line'];
552
- $return['extra']['start_at_byte'] = $last_position;
553
- $this->logger->info(sprintf(
554
- "Reached the maximum %s request data limit, returning response",
555
- $this->file_size_per_request_limit
556
- ));
557
- return $return;
558
- }
559
- }
560
-
561
- if (!$file->eof()) {
562
- clearstatcache();
563
- $return['extra']['backup_size'] = $archive_info->getSize();
564
-
565
- $return['finished'] = 0;
566
- $return['extra']['start_at_line'] = $extra_params['start_at_line'];
567
- $return['extra']['start_at_byte'] = $last_position;
568
- $this->logger->info(sprintf(
569
- "We have reached the maximum files to process per request limit of %s, returning response",
570
- $this->files_to_process_per_request
571
- ));
572
-
573
- return $return;
574
- }
575
-
576
- //close the backup archive by adding 2*512 blocks of zero bytes
577
- $this->logger->info(sprintf(
578
- "Closing the backup archive %s with 2*512 zero bytes blocks.",
579
- $this->get_archive_name_with_extension()
580
- ));
581
- $this->backup_archive->close();
582
-
583
- /**
584
- * XCloner HOOK backup_archive_finished.
585
- *
586
- * This will get triggered when a backup archive is finished writing.
587
- */
588
- //do_action('backup_archive_finished', $this->backup_archive, $this);
589
-
590
- //updating archive_info
591
- $archive_info = $this->filesystem->get_storage_path_file_info($this->get_archive_name_with_extension());
592
-
593
- if ($return['extra']['backup_part']) {
594
- $this->write_multipart_file($this->get_archive_name_with_extension());
595
- }
596
-
597
- $return['extra']['start_at_line'] = $extra_params['start_at_line'] - 1;
598
-
599
- if (isset($file_info)) {
600
- $return['extra']['processed_file'] = $file_info['path'];
601
- $return['extra']['processed_file_size'] = $file_info['size'];
602
- }
603
-
604
- clearstatcache();
605
- $return['extra']['backup_size'] = $archive_info->getSize();
606
-
607
- $return['finished'] = 1;
608
- return $return;
609
- }
610
-
611
- /*
612
- *
613
- * Write multipart file components
614
- *
615
- */
616
- private function write_multipart_file($path = "")
617
- {
618
- if (!$path) {
619
- $path = $this->get_archive_name_with_extension();
620
- }
621
-
622
- $file = $this->filesystem->get_filesystem("storage_filesystem_append")->getMetadata($path);
623
- //print_r($file_info);
624
- $line = '"'.$file['path'].'","'.$file['timestamp'].'","'.$file['size'].'"'.PHP_EOL;
625
-
626
-
627
- $this->filesystem->get_filesystem("storage_filesystem_append")
628
- ->write($this->get_archive_name_multipart(), $line);
629
- }
630
-
631
- /*
632
- *
633
- * Create a new backup part
634
- *
635
- */
636
- private function create_new_backup_part($part = 0)
637
- {
638
- //close the backup archive by adding 2*512 blocks of zero bytes
639
- $this->logger->info(sprintf(
640
- "Closing the backup archive %s with 2*512 zero bytes blocks.",
641
- $this->get_archive_name_with_extension()
642
- ));
643
- $this->backup_archive->close();
644
-
645
- if (!$part) {
646
- $old_name = $this->get_archive_name_with_extension();
647
- $this->set_archive_name($this->get_archive_name(), ++$part);
648
- $this->rename_archive($old_name, $this->get_archive_name_with_extension());
649
-
650
- if ($this->filesystem->get_storage_filesystem()->has($this->get_archive_name_multipart())) {
651
- $this->filesystem->get_storage_filesystem()->delete($this->get_archive_name_multipart());
652
- }
653
-
654
- $this->write_multipart_file($this->get_archive_name_with_extension());
655
- } else {
656
- $this->logger->info(sprintf(
657
- "Creating new multipart info file %s",
658
- $this->get_archive_name_with_extension()
659
- ));
660
- $this->write_multipart_file($this->get_archive_name_with_extension());
661
- }
662
-
663
- $this->set_archive_name($this->get_archive_name(), ++$part);
664
-
665
- $this->logger->info(sprintf("Creating new backup archive part %s", $this->get_archive_name_with_extension()));
666
-
667
- $this->backup_archive = $this;
668
- $this->backup_archive->setCompression($this->compression_level);
669
- $archive_info = $this->filesystem->get_storage_path_file_info($this->get_archive_name_with_extension());
670
- $this->backup_archive->create($archive_info->getPath().DS.$archive_info->getFilename());
671
-
672
- return array($archive_info, $part);
673
- }
674
-
675
- /*
676
- *
677
- * Add file to archive
678
- *
679
- */
680
-
681
- /**
682
- * @param integer $append
683
- */
684
- public function add_file_to_archive($file_info, $start_at_byte, $byte_limit = 0, $append, $filesystem)
685
- {
686
- $start_adapter = $this->filesystem->get_adapter($filesystem);
687
- $start_filesystem = $this->filesystem->get_adapter($filesystem);
688
-
689
- if (!$file_info['path']) {
690
- return;
691
- }
692
-
693
- if (isset($file_info['archive_prefix_path'])) {
694
- $file_info['target_path'] = $file_info['archive_prefix_path']."/".$file_info['path'];
695
- } else {
696
- $file_info['target_path'] = $file_info['path'];
697
- }
698
-
699
- $last_position = $start_at_byte;
700
-
701
- //$start_adapter = $this->filesystem->get_start_adapter();
702
-
703
- if (!$append) {
704
- $bytes_wrote = $file_info['size'];
705
- $this->logger->info(sprintf(
706
- "Adding %s bytes of file %s to archive %s ",
707
- $bytes_wrote,
708
- $file_info['target_path'],
709
- $this->get_archive_name_with_extension()
710
- ));
711
- $this->backup_archive->addFile(
712
- $start_adapter->applyPathPrefix($file_info['path']),
713
- $file_info['target_path']
714
- );
715
- } else {
716
- $tmp_file = md5($file_info['path']);
717
-
718
- //we isolate file to tmp if we are at byte 0, the starting point of file reading
719
- if (!$start_at_byte) {
720
- $this->logger->info(sprintf(
721
- "Copying %s file to tmp filesystem file %s to prevent reading changes",
722
- $file_info['path'],
723
- $tmp_file
724
- ));
725
- $file_stream = $start_filesystem->readStream($file_info['path']);
726
-
727
- if (is_resource($file_stream['stream'])) {
728
- $this->filesystem->get_tmp_filesystem()->writeStream($tmp_file, $file_stream['stream']);
729
- }
730
- }
731
-
732
- if ($this->filesystem->get_tmp_filesystem()->has($tmp_file)) {
733
- $is_tmp = 1;
734
- $last_position = $this->backup_archive->appendFileData(
735
- $this->filesystem->get_tmp_filesystem_adapter()
736
- ->applyPathPrefix($tmp_file),
737
- $file_info['target_path'],
738
- $start_at_byte,
739
- $byte_limit
740
- );
741
- } else {
742
- $is_tmp = 0;
743
- $last_position = $this->backup_archive->appendFileData(
744
- $start_adapter->applyPathPrefix($file_info['path']),
745
- $file_info['target_path'],
746
- $start_at_byte,
747
- $byte_limit
748
- );
749
- }
750
-
751
-
752
- if ($last_position == -1) {
753
- $bytes_wrote = $file_info['size'] - $start_at_byte;
754
- } else {
755
- $bytes_wrote = $last_position - $start_at_byte;
756
- }
757
-
758
-
759
- if ($is_tmp) {
760
- $this->logger->info(sprintf(
761
- "Appended %s bytes, starting position %s, of tmp file %s (%s) to archive %s ",
762
- $bytes_wrote,
763
- $start_at_byte,
764
- $tmp_file,
765
- $file_info['target_path'],
766
- $this->get_archive_name()
767
- ));
768
- } else {
769
- $this->logger->info(sprintf(
770
- "Appended %s bytes, starting position %s, of original file %s to archive %s ",
771
- $bytes_wrote,
772
- $start_at_byte,
773
- $file_info['target_path'],
774
- $tmp_file,
775
- $this->get_archive_name()
776
- ));
777
- }
778
-
779
- //we delete here the isolated tmp file
780
- if ($last_position == -1) {
781
- if ($this->filesystem->get_tmp_filesystem_adapter()->has($tmp_file)) {
782
- $this->logger->info(sprintf("Deleting %s from the tmp filesystem", $tmp_file));
783
- $this->filesystem->get_tmp_filesystem_adapter()->delete($tmp_file);
784
- }
785
- }
786
- }
787
-
788
- return array($bytes_wrote, $last_position);
789
- }
790
-
791
- /**
792
- * Append data to a file to the current TAR archive using an existing file in the filesystem
793
- *
794
- * @param string $file path to the original file
795
- * @param int $start starting reading position in file
796
- * @param int $end end position in reading multiple with 512
797
- * @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with
798
- * all meta data, empty to take from original
799
- * @throws ArchiveIOException
800
- */
801
- public function appendFileData($file, $fileinfo = '', $start = 0, $limit = 0)
802
- {
803
- $end = $start+($limit*512);
804
-
805
- //check to see if we are at the begining of writing the file
806
- if (!$start) {
807
- if (is_string($fileinfo)) {
808
- $fileinfo = FileInfo::fromPath($file, $fileinfo);
809
- }
810
- }
811
-
812
- if ($this->closed) {
813
- throw new ArchiveIOException('Archive has been closed, files can no longer be added');
814
- }
815
-
816
- if (is_dir($file)) {
817
- $this->writeFileHeader($fileinfo);
818
- return;
819
- }
820
-
821
- $fp = fopen($file, 'rb');
822
-
823
- fseek($fp, $start);
824
-
825
- if (!$fp) {
826
- throw new ArchiveIOException('Could not open file for reading: '.$file);
827
- }
828
-
829
- // create file header
830
- if (!$start) {
831
- $this->writeFileHeader($fileinfo);
832
- }
833
-
834
- $bytes = 0;
835
- // write data
836
- while ($end >=ftell($fp) and !feof($fp)) {
837
- $data = fread($fp, 512);
838
- if ($data === false) {
839
- break;
840
- }
841
- if ($data === '') {
842
- break;
843
- }
844
- $packed = pack("a512", $data);
845
- $bytes += $this->writebytes($packed);
846
- }
847
-
848
-
849
-
850
- //if we are not at the end of file, we return the current position for incremental writing
851
- if (!feof($fp)) {
852
- $last_position = ftell($fp);
853
- } else {
854
- $last_position = -1;
855
- }
856
-
857
- fclose($fp);
858
-
859
- return $last_position;
860
- }
861
-
862
- public function open($file, $start_byte = 0)
863
- {
864
- parent::open($file);
865
-
866
- if ($start_byte) {
867
- fseek($this->fh, $start_byte);
868
- }
869
- }
870
-
871
- /**
872
- * Open a TAR archive and put the file cursor at the end for data appending
873
- *
874
- * If $file is empty, the tar file will be created in memory
875
- *
876
- * @param string $file
877
- * @throws ArchiveIOException
878
- */
879
- public function openForAppend($file = '')
880
- {
881
- $this->file = $file;
882
- $this->memory = '';
883
- $this->fh = 0;
884
-
885
- if ($this->file) {
886
- // determine compression
887
- if ($this->comptype == Archive::COMPRESS_AUTO) {
888
- $this->setCompression($this->complevel, $this->filetype($file));
889
- }
890
-
891
- if ($this->comptype === Archive::COMPRESS_GZIP) {
892
- $this->fh = @gzopen($this->file, 'ab'.$this->complevel);
893
- } elseif ($this->comptype === Archive::COMPRESS_BZIP) {
894
- $this->fh = @bzopen($this->file, 'a');
895
- } else {
896
- $this->fh = @fopen($this->file, 'ab');
897
- }
898
-
899
- if (!$this->fh) {
900
- throw new ArchiveIOException('Could not open file for writing: '.$this->file);
901
- }
902
- }
903
- $this->writeaccess = true;
904
- $this->closed = false;
905
- }
906
-
907
- /**
908
- * Read the contents of a TAR archive
909
- *
910
- * This function lists the files stored in the archive
911
- *
912
- * The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams.
913
- * Reopen the file with open() again if you want to do additional operations
914
- *
915
- * @throws ArchiveIOException
916
- * @returns FileInfo[]
917
- */
918
- public function contents($files_limit = 0)
919
- {
920
- if ($this->closed || !$this->file) {
921
- throw new ArchiveIOException('Can not read from a closed archive');
922
- }
923
-
924
- $files_counter = 0;
925
- $result = array();
926
-
927
- while ($read = $this->readbytes(512)) {
928
- $header = $this->parseHeader($read);
929
- if (!is_array($header)) {
930
- continue;
931
- }
932
-
933
- if($files_limit)
934
- {
935
- if(++$files_counter > $files_limit)
936
- {
937
- $return['extracted_files'] = $result;
938
- $return['start'] = ftell($this->fh)-512;
939
- return $return;
940
- }
941
- }
942
-
943
- if($header['typeflag'] == 5)
944
- $header['size'] = 0;
945
-
946
- $this->skipbytes(ceil($header['size'] / 512) * 512);
947
- $result[] = $this->header2fileinfo($header);
948
- }
949
-
950
- $return['extracted_files'] = $result;
951
-
952
- $this->close();
953
- return $return;
954
- }
955
-
956
- /**
957
- * Extract archive contents
958
- *
959
- * @param [type] $outdir
960
- * @param string $strip
961
- * @param string $exclude
962
- * @param string $include
963
- * @param integer $files_limit
964
- * @return void
965
- */
966
- public function extract($outdir, $strip = '', $exclude = '', $include = '', $files_limit = 0)
967
- {
968
-
969
- if ($this->closed || !$this->file) {
970
- throw new ArchiveIOException('Can not read from a closed archive');
971
- }
972
-
973
- $outdir = rtrim($outdir, '/');
974
- if(!is_dir($outdir))
975
- @mkdir($outdir, 0755, true);
976
- else
977
- @chmod($outdir, 0777);
978
-
979
- //@mkdir($outdir, 0777, true);
980
-
981
- if (!is_dir($outdir)) {
982
- throw new ArchiveIOException("Could not create directory '$outdir'");
983
- }
984
-
985
- $files_counter = 0;
986
- $return = array();
987
-
988
- $extracted = array();
989
- while ($dat = $this->readbytes(512)) {
990
- // read the file header
991
- $header = $this->parseHeader($dat);
992
- if (!is_array($header)) {
993
- continue;
994
- }
995
-
996
- if($files_limit)
997
- {
998
- if(++$files_counter > $files_limit)
999
- {
1000
- $return['extracted_files'] = $extracted;
1001
- $return['start'] = ftell($this->fh)-512;
1002
- return $return;
1003
- }
1004
- }
1005
-
1006
- $fileinfo = $this->header2fileinfo($header);
1007
-
1008
- // apply strip rules
1009
- $fileinfo->strip($strip);
1010
-
1011
- // skip unwanted files
1012
- if (!strlen($fileinfo->getPath()) || !$fileinfo->match($include, $exclude)) {
1013
- $this->skipbytes(ceil($header['size'] / 512) * 512);
1014
- continue;
1015
- }
1016
-
1017
- // create output directory
1018
- $output = $outdir.'/'.$fileinfo->getPath();
1019
- $directory = ($fileinfo->getIsdir()) ? $output : dirname($output);
1020
- if(!is_dir($directory))
1021
- @mkdir($directory, 0755, true);
1022
- else
1023
- @chmod($directory, 0755);
1024
-
1025
- // extract data
1026
- if (!$fileinfo->getIsdir()) {
1027
- if(file_exists($output))
1028
- unlink($output);
1029
-
1030
- $fp = fopen($output, "wb");
1031
- if (!$fp) {
1032
- throw new ArchiveIOException('Could not open file for writing: '.$output);
1033
- }
1034
-
1035
- $size = floor($header['size'] / 512);
1036
- for ($i = 0; $i < $size; $i++) {
1037
- fwrite($fp, $this->readbytes(512), 512);
1038
- }
1039
- if (($header['size'] % 512) != 0) {
1040
- fwrite($fp, $this->readbytes(512), $header['size'] % 512);
1041
- }
1042
-
1043
- fclose($fp);
1044
- touch($output, $fileinfo->getMtime());
1045
- chmod($output, $fileinfo->getMode());
1046
- } else {
1047
- //$this->skipbytes(ceil($header['size'] / 512) * 512); // the size is usually 0 for directories
1048
- $this->skipbytes(ceil(0 / 512) * 512); // the size is usually 0 for directories
1049
- }
1050
-
1051
- $extracted[] = $fileinfo;
1052
- }
1053
-
1054
- $this->close();
1055
-
1056
- $return['extracted_files'] = $extracted;
1057
-
1058
- return $return;
1059
- }
1060
-
1061
-
1062
-
1063
- /**
1064
- * Adds a file to a TAR archive by appending it's data
1065
- *
1066
- * @param string $archive name of the archive file
1067
- * @param string $file name of the file to read data from
1068
- * @param string $start start position from where to start reading data
1069
- * @throws ArchiveIOException
1070
- */
1071
- /*public function addFileToArchive($archive, $file, $start = 0)
1072
- {
1073
- $this->openForAppend($archive);
1074
- return $start = $this->appendFileData($file, $start, $this->file_size_per_request_limit);
1075
- }
1076
- */
1077
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-database.php DELETED
@@ -1,674 +0,0 @@
1
- <?php
2
-
3
-
4
- /*
5
- * class-xcloner-database.php
6
- *
7
- * Copyright 2017 Ovidiu Liuta <info@thinkovi.com>
8
- *
9
- * This program is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License as published by
11
- * the Free Software Foundation; either version 2 of the License, or
12
- * (at your option) any later version.
13
- *
14
- * This program is distributed in the hope that it will be useful,
15
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
- * GNU General Public License for more details.
18
- *
19
- * You should have received a copy of the GNU General Public License
20
- * along with this program; if not, write to the Free Software
21
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
22
- * MA 02110-1301, USA.
23
- */
24
-
25
- if (!class_exists('wpdb')) {
26
- require_once __DIR__ . "/../lib/wp-db.php";
27
- }
28
-
29
- class Xcloner_Database extends wpdb
30
- {
31
- public $debug = 0;
32
- public $recordsPerSession = 10000;
33
- public $dbCompatibility = "";
34
- public $dbDropSyntax = 1;
35
- public $countRecords = 0;
36
-
37
- private $link;
38
- private $db_selected;
39
- private $logger;
40
- private $xcloner_settings;
41
- private $fs;
42
-
43
- private $xcloner_dbhost;
44
- private $xcloner_dbuser;
45
- private $xcloner_dbpassword;
46
- private $xcloner_dbname;
47
- private $xcloner_prefix;
48
-
49
- private $TEMP_DBPROCESS_FILE = ".database";
50
- private $TEMP_DUMP_FILE = "database-backup.sql";
51
-
52
- public function __construct(Xcloner $xcloner_container, $wp_user = "", $wp_pass = "", $wp_db = "", $wp_host = "")
53
- {
54
- $this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_database");
55
- $this->xcloner_settings = $xcloner_container->get_xcloner_settings();
56
- $this->fs = $xcloner_container->get_xcloner_filesystem();
57
-
58
- if ($this->xcloner_settings->get_xcloner_option('xcloner_database_records_per_request')) {
59
- $this->recordsPerSession = $this->xcloner_settings->get_xcloner_option('xcloner_database_records_per_request');
60
- }
61
-
62
- if (!$this->recordsPerSession) {
63
- $this->recordsPerSession = 100;
64
- }
65
-
66
- $this->xcloner_dbhost = $this->xcloner_settings->get_db_hostname();
67
- $this->xcloner_dbuser = $this->xcloner_settings->get_db_username();
68
- $this->xcloner_dbpassword = $this->xcloner_settings->get_db_password();
69
- $this->xcloner_dbname = $this->xcloner_settings->get_db_database();
70
- $this->xcloner_prefix= "";
71
-
72
- //fetch the default wordpress mysql credentials
73
- if ( !$this->xcloner_dbuser || !$this->xcloner_dbhost || !$this->xcloner_dbname ) {
74
- global $wpdb;
75
-
76
- $this->xcloner_dbhost = $wpdb->dbhost;
77
- update_option('xcloner_mysql_hostname', $this->xcloner_dbhost);
78
- $this->xcloner_dbuser = $wpdb->dbuser;
79
- update_option('xcloner_mysql_username', $this->xcloner_dbuser);
80
- $this->xcloner_dbpassword = $wpdb->dbpassword;
81
- update_option('xcloner_mysql_password', $this->xcloner_dbpassword);
82
- $this->xcloner_dbname = $wpdb->dbname;
83
- update_option('xcloner_mysql_database', $this->xcloner_dbname);
84
- $this->xcloner_prefix = $wpdb->prefix;
85
- update_option('xcloner_mysql_prefix', $this->xcloner_prefix);
86
-
87
- }
88
-
89
- parent::__construct($this->xcloner_dbuser, $this->xcloner_dbpassword, $this->xcloner_dbname, $this->xcloner_dbhost);
90
-
91
- //$this->use_mysqli = true;
92
- }
93
-
94
- public function getPrefix() {
95
- return $this->xcloner_prefix;
96
- }
97
-
98
- public function getDbHost()
99
- {
100
- return $this->xcloner_dbhost;
101
- }
102
-
103
- public function getDbUser()
104
- {
105
- return $this->xcloner_dbuser;
106
- }
107
-
108
- public function getDbPassword()
109
- {
110
- return $this->xcloner_dbpassword;
111
- }
112
-
113
- public function getDbName()
114
- {
115
- return $this->xcloner_dbname;
116
- }
117
-
118
- /*
119
- * Initialize the database connection
120
- *
121
- * name: init
122
- * @param array $data {'dbHostname', 'dbUsername', 'dbPassword', 'dbDatabase'}
123
- * @return
124
- */
125
- public function init($data, $start = 0)
126
- {
127
- if ($start and $this->fs->get_tmp_filesystem()->has($this->TEMP_DBPROCESS_FILE)) {
128
- $this->fs->get_tmp_filesystem()->delete($this->TEMP_DBPROCESS_FILE);
129
- }
130
-
131
- $this->headers();
132
-
133
- $this->suppress_errors = true;
134
- }
135
-
136
- public function start_database_recursion($params, $extra_params, $init = 0)
137
- {
138
- $tables = array();
139
- $return['finished'] = 0;
140
- $return['stats'] = array(
141
- "total_records"=>0,
142
- "tables_count"=>0,
143
- "database_count"=>0,
144
- );
145
-
146
- if (!$this->xcloner_settings->get_enable_mysql_backup()) {
147
- $return['finished'] = 1;
148
- return $return;
149
- }
150
-
151
- $this->logger->debug(__("Starting database backup process"));
152
-
153
- $this->init($params, $init);
154
-
155
- if ($init) {
156
- $db_count = 0;
157
-
158
- if (isset($params['#'])) {
159
- foreach ($params['#'] as $database) {
160
- if (!isset($params[$database]) or !is_array($params[$database])) {
161
- $params[$database] = array();
162
- }
163
- }
164
- $db_count = -1;
165
- }
166
-
167
- if (isset($params) and is_array($params)) {
168
- foreach ($params as $database=>$tables) {
169
- if ($database != "#") {
170
- $stats = $this->write_backup_process_list($database, $tables);
171
- $return['stats']['tables_count'] += $stats['tables_count'];
172
- $return['stats']['total_records'] += $stats['total_records'];
173
- }
174
- }
175
- }
176
-
177
- if (sizeof($params)) {
178
- $return['stats']['database_count'] = sizeof($params) + $db_count;
179
- } else {
180
- $return['stats']['database_count'] = 0;
181
- }
182
-
183
- return $return;
184
- }
185
-
186
- if (!isset($extra_params['startAtLine'])) {
187
- $extra_params['startAtLine'] = 0;
188
- }
189
- if (!isset($extra_params['startAtRecord'])) {
190
- $extra_params['startAtRecord'] = 0;
191
- }
192
- if (!isset($extra_params['dumpfile'])) {
193
- $extra_params['dumpfile'] = "";
194
- }
195
-
196
- $return = $this->process_incremental($extra_params['startAtLine'], $extra_params['startAtRecord'], $extra_params['dumpfile']);
197
-
198
- return $return;
199
- }
200
-
201
- public function log($message = "")
202
- {
203
- if ($message) {
204
- $this->logger->info($message, array(""));
205
- } else {
206
- if ($this->last_query) {
207
- $this->logger->debug($this->last_query, array(""));
208
- }
209
- if ($this->last_error) {
210
- $this->logger->error($this->last_error, array(""));
211
- }
212
- }
213
-
214
- return;
215
- }
216
-
217
- /*
218
- *Return any error
219
- *
220
- * name: error
221
- * @param string $message
222
- * @return
223
- */
224
- public function error($message)
225
- {
226
- $this->logger->error($message, array(""));
227
-
228
- return;
229
- }
230
-
231
- /*
232
- * Send some special headers after the connection is initialized
233
- *
234
- * name: headers
235
- * @param
236
- */
237
- private function headers()
238
- {
239
- $this->logger->debug(__("Setting mysql headers"));
240
-
241
- $this->query("SET SQL_QUOTE_SHOW_CREATE=1;");
242
- //$this->log();
243
- $this->query("SET sql_mode = 0;");
244
- //$this->log();
245
-
246
- $this->set_charset($this->dbh, 'utf8');
247
- //$this->log();
248
- }
249
-
250
- public function get_database_num_tables($database)
251
- {
252
- $this->logger->debug(sprintf(__("Getting number of tables in %s"), $database));
253
-
254
- $query = "show tables in `".$database."`";
255
-
256
- $res = $this->get_results($query);
257
- $this->log();
258
-
259
- return count($res);
260
- }
261
-
262
- public function get_all_databases()
263
- {
264
- $this->logger->debug(("Getting all databases"));
265
-
266
- $query = "SHOW DATABASES;";
267
-
268
- $databases = $this->get_results($query);
269
- $this->log();
270
-
271
- $databases_list = array();
272
-
273
- $i = 0;
274
-
275
- $databases_list[$i]['name'] = $this->dbname;
276
- $databases_list[$i]['num_tables'] = $this->get_database_num_tables($this->dbname);
277
- $i++;
278
-
279
- if (is_array($databases)) {
280
- foreach ($databases as $db) {
281
- if ($db->Database != $this->dbname) {
282
- $databases_list[$i]['name'] = $db->Database;
283
- $databases_list[$i]['num_tables'] = $this->get_database_num_tables($db->Database);
284
- $i++;
285
- }
286
- }
287
- }
288
-
289
- return $databases_list;
290
- }
291
-
292
- /*
293
- * Returns an array of tables from a database and mark $excluded ones
294
- *
295
- * name: list_tables
296
- * @param string $database
297
- * @param array $included
298
- * @param int $get_num_records
299
- * @return array $tablesList
300
- */
301
- public function list_tables($database = "", $included = array(), $get_num_records = 0)
302
- {
303
- $tablesList[0] = array( );
304
- $inc = 0;
305
-
306
- if (!$database) {
307
- $database = $this->dbname;
308
- }
309
-
310
- $this->logger->debug(sprintf(("Listing tables in %s database"), $database));
311
-
312
- $tables = $this->get_results("SHOW TABLES in `".$database."`");
313
- $this->log();
314
-
315
- foreach ($tables as $table) {
316
- $table = array_values((array)$table)[0];
317
-
318
- $tablesList[$inc]['name'] = $table;
319
- $tablesList[$inc]['database'] = $database;
320
-
321
- if ($get_num_records) {
322
- $records_num_result = $this->get_var("SELECT count(*) FROM `".$database."`.`".$table."`");
323
- $this->log();
324
-
325
- $tablesList[$inc]['records'] = $records_num_result;
326
- }
327
-
328
- $tablesList[$inc]['excluded'] = 0;
329
-
330
- if (sizeof($included) and is_array($included)) {
331
- $dbTable = $database.".".$table;
332
- if (!in_array($table, $included) and !in_array($dbTable, $included)) {
333
- $tablesList[$inc]['excluded'] = 1;
334
- $this->log(sprintf(__("Excluding table %s.%s from backup"), $table, $database));
335
- }
336
- }
337
-
338
- $inc++;
339
- }
340
-
341
- return $tablesList;
342
- }
343
-
344
- public function write_backup_process_list($dbname, $incl_tables)
345
- {
346
- $return['total_records'] = 0;
347
- $return['tables_count'] = 0;
348
-
349
- $this->log(__("Preparing the database recursion file"));
350
-
351
- $tables = $this->list_tables($dbname, $incl_tables, 1);
352
-
353
- if ($this->dbname != $dbname) {
354
- $dumpfile = $dbname."-backup.sql";
355
- } else {
356
- $dumpfile = $this->TEMP_DUMP_FILE;
357
- }
358
-
359
- $line = sprintf("###newdump###\t%s\t%s\n", $dbname, $dumpfile);
360
- $this->fs->get_tmp_filesystem_append()->write($this->TEMP_DBPROCESS_FILE, $line);
361
-
362
- // write this to the class and write to $TEMP_DBPROCESS_FILE file as database.table records
363
- foreach ($tables as $key=>$table) {
364
- if ($table != "" and !$tables[$key]['excluded']) {
365
- $line = sprintf("`%s`.`%s`\t%s\t%s\n", $dbname, $tables[$key]['name'], $tables[$key]['records'], $tables[$key]['excluded']);
366
- $this->fs->get_tmp_filesystem_append()->write($this->TEMP_DBPROCESS_FILE, $line);
367
- $return['tables_count']++;
368
- $return['total_records'] += $tables[$key]['records'];
369
- }
370
- }
371
-
372
- $line = sprintf("###enddump###\t%s\t%s\n", $dbname, $dumpfile);
373
- $this->fs->get_tmp_filesystem_append()->write($this->TEMP_DBPROCESS_FILE, $line);
374
-
375
- return $return;
376
- }
377
-
378
- /*
379
- * Returns the number of records from a table
380
- *
381
- * name: countRecords
382
- * @param string $table - the source table
383
- * @return int $count
384
- */
385
- public function countRecords($table)
386
- {
387
- $table = "`".$this->dbname."`.`$table`";
388
-
389
- $result = $this->get_var("SELECT count(*) FROM $table;");
390
-
391
- return intval($result) ;// not max limit on 32 bit systems 2147483647; on 64 bit 9223372036854775807
392
- }
393
-
394
- /*
395
- * Processing the mysql backup incrementally
396
- *
397
- * name: processIncremental
398
- * @param
399
- * int $startAtLine - at which line from the perm.txt file to start reading
400
- * int startAtRecord - at which record to start from the table found at $startAtLine
401
- * string $dumpfie - where to save the data
402
- * string $dbCompatibility - MYSQL40, MYSQ32, none=default
403
- * int $dbDropSyntax - check if the DROP TABLE syntax should be added
404
- * @return array $return
405
- */
406
- public function process_incremental($startAtLine = 0, $startAtRecord = 0, $dumpfile = "", $dbCompatibility = "")
407
- {
408
- $count = 0;
409
- $return['finished'] = 0;
410
- $lines = array();
411
-
412
- if ($this->fs->get_tmp_filesystem()->has($this->TEMP_DBPROCESS_FILE)) {
413
- $lines = array_filter(explode("\n", $this->fs->get_tmp_filesystem()->read($this->TEMP_DBPROCESS_FILE)));
414
- }
415
-
416
- foreach ($lines as $buffer) {
417
- if ($count == $startAtLine) {
418
- $tableInfo = explode("\t", $buffer);
419
-
420
- if ($tableInfo[0] == "###newdump###") {
421
- // we create a new mysql dump file
422
- if ($dumpfile != "") {
423
- // we finished a previous one and write the footers
424
- $return['dumpsize'] = $this->data_footers($dumpfile);
425
- }
426
-
427
- $dumpfile = $tableInfo[2];
428
-
429
- $this->log(sprintf(__("Starting new backup dump to file %s"), $dumpfile));
430
-
431
- $this->data_headers($dumpfile, $tableInfo[1]);
432
- $dumpfile = $tableInfo[2];
433
- $startAtLine++;
434
- $return['new_dump'] = 1;
435
- //break;
436
- } else {
437
- //we export the table
438
- if ($tableInfo[0] == "###enddump###") {
439
- $return['endDump'] = 1;
440
- }
441
-
442
- //table is excluded
443
- if ($tableInfo[2]) {
444
- continue;
445
- }
446
-
447
- $next = $startAtRecord + $this->recordsPerSession;
448
-
449
- // $tableInfo[1] number of records in the table
450
- $table = explode("`.`", $tableInfo[0]);
451
- $tableName = str_replace("`", "", $table[1]);
452
- $databaseName = str_replace("`", "", $table[0]);
453
-
454
- //return something to the browser
455
- $return['databaseName'] = $databaseName;
456
- $return['tableName'] = $tableName;
457
- $return['totalRecords'] = $tableInfo[1];
458
-
459
- $processed_records = 0;
460
-
461
- if (trim($tableName) != "" and !$tableInfo[2]) {
462
- $processed_records = $this->export_table($databaseName, $tableName, $startAtRecord, $this->recordsPerSession, $dumpfile);
463
- }
464
-
465
- $return['processedRecords'] = $startAtRecord + $processed_records;
466
-
467
- if ($next >= $tableInfo[1]) { //we finished loading the records for next sessions, will go to the new record
468
- $startAtLine++;
469
- $startAtRecord = 0;
470
- } else {
471
- $startAtRecord = $startAtRecord + $this->recordsPerSession;
472
- }
473
-
474
- //$return['dbCompatibility'] = self::$dbCompatibility;
475
-
476
- $return['startAtLine'] = $startAtLine;
477
- $return['startAtRecord'] = $startAtRecord;
478
- $return['dumpfile'] = $dumpfile;
479
- $return['dumpsize'] = $this->fs->get_tmp_filesystem_append()->getSize($dumpfile);
480
-
481
- return $return;
482
- break;
483
- }
484
- }
485
-
486
- $count++;
487
- }
488
-
489
- //while is finished, lets go home...
490
- if ($dumpfile != "") {
491
- // we finished a previous one and write the footers
492
- $return['dumpsize'] = $this->data_footers($dumpfile);
493
- $return['dumpfile'] = ($dumpfile);
494
- }
495
- $return['finished'] = 1;
496
- $return['startAtLine'] = $startAtLine;
497
-
498
- if ($this->fs->get_tmp_filesystem()->has($this->TEMP_DBPROCESS_FILE)) {
499
- $this->fs->get_tmp_filesystem()->delete($this->TEMP_DBPROCESS_FILE);
500
- }
501
-
502
- $this->logger->debug(sprintf(("Database backup finished!")));
503
-
504
- return $return;
505
- }
506
-
507
-
508
- /*
509
- * Exporting the table records
510
- *
511
- * name: exportTable
512
- * @param
513
- * string $databaseName - database name of the table
514
- * string tableName - table name
515
- * int $start - where to start from
516
- * int $limit - how many records
517
- * handler $fd - file handler where to write the records
518
- * @return
519
- */
520
-
521
- /**
522
- * @param integer $start
523
- * @param integer $limit
524
- */
525
- public function export_table($databaseName, $tableName, $start, $limit, $dumpfile)
526
- {
527
- $this->logger->debug(sprintf(("Exporting table %s.%s data"), $databaseName, $tableName));
528
-
529
- $records = 0;
530
-
531
- if ($start == 0) {
532
- $this->dump_structure($databaseName, $tableName, $dumpfile);
533
- }
534
-
535
- $start = intval($start);
536
- $limit = intval($limit);
537
- //exporting the table content now
538
-
539
- $query = "SELECT * from `$databaseName`.`$tableName` Limit $start, $limit ;";
540
- if ($this->use_mysqli) {
541
- $result = mysqli_query($this->dbh, $query);
542
- $mysql_fetch_function = "mysqli_fetch_array";
543
- } else {
544
- $result = mysql_query($query, $this->dbh);
545
- $mysql_fetch_function = "mysqli_fetch_array";
546
- }
547
- //$result = $this->get_results($query, ARRAY_N);
548
- //print_r($result); exit;
549
-
550
- if ($result) {
551
- while ($row = $mysql_fetch_function($result, MYSQLI_ASSOC)) {
552
- $this->fs->get_tmp_filesystem_append()->write($dumpfile, "INSERT INTO `$tableName` VALUES (");
553
- $arr = $row;
554
- $buffer = "";
555
- $this->countRecords++;
556
-
557
- foreach ($arr as $key => $value) {
558
- if (!is_null($value)) {
559
- $value = $this->_real_escape($value);
560
-
561
- if (method_exists($this, 'remove_placeholder_escape')) {
562
- $value = $this->remove_placeholder_escape($value);
563
- }
564
- $buffer .= "'" . $value . "', ";
565
- } else {
566
- $buffer .= "null, ";
567
- }
568
- }
569
- $buffer = rtrim($buffer, ', ').");\n";
570
- $this->fs->get_tmp_filesystem_append()->write($dumpfile, $buffer);
571
- unset($buffer);
572
-
573
- $records++;
574
- }
575
- }
576
-
577
- $this->log(sprintf(__("Dumping %s records starting position %s from %s.%s table"), $records, $start, $databaseName, $tableName));
578
-
579
- return $records;
580
- }
581
-
582
- public function dump_structure($databaseName, $tableName, $dumpfile)
583
- {
584
- $this->log(sprintf(__("Dumping the structure for %s.%s table"), $databaseName, $tableName));
585
-
586
- $line = ("\n#\n# Table structure for table `$tableName`\n#\n\n");
587
- $this->fs->get_tmp_filesystem_append()->write($dumpfile, $line);
588
-
589
- if ($this->dbDropSyntax) {
590
- $line = ("\nDROP table IF EXISTS `$tableName`;\n");
591
- $this->fs->get_tmp_filesystem_append()->write($dumpfile, $line);
592
- }
593
-
594
- //$result = mysqli_query($this->dbh,"SHOW CREATE table `$databaseName`.`$tableName`;");
595
- $result = $this->get_row("SHOW CREATE table `$databaseName`.`$tableName`;", ARRAY_N);
596
- if ($result) {
597
- //$row = mysqli_fetch_row( $result);
598
- $line = ($result[1].";\n");
599
- $this->fs->get_tmp_filesystem_append()->write($dumpfile, $line);
600
- }
601
-
602
- $line = ("\n#\n# End Structure for table `$tableName`\n#\n\n");
603
- $line .= ("#\n# Dumping data for table `$tableName`\n#\n\n");
604
- $this->fs->get_tmp_filesystem_append()->write($dumpfile, $line);
605
-
606
- return;
607
- }
608
-
609
- public function data_footers($dumpfile)
610
- {
611
- $this->logger->debug(sprintf(("Writing dump footers in file"), $dumpfile));
612
- // we finished the dump file, not return the size of it
613
- $this->fs->get_tmp_filesystem_append()->write($dumpfile, "\n#\n# Finished at: ".date("M j, Y \a\\t H:i")."\n#");
614
- $size = $this->fs->get_tmp_filesystem_append()->getSize($dumpfile);
615
-
616
- $metadata_dumpfile = $this->fs->get_tmp_filesystem()->getMetadata($dumpfile);
617
-
618
- //adding dump file to the included files list
619
- $this->fs->store_file($metadata_dumpfile, 'tmp_filesystem');
620
-
621
- return $size;
622
- }
623
-
624
- public function resetcountRecords()
625
- {
626
- $this->countRecords = 0;
627
-
628
- return $this->countRecords;
629
- }
630
-
631
- public function getcountRecords()
632
- {
633
- return $this->countRecords;
634
- }
635
-
636
-
637
- public function data_headers($file, $database)
638
- {
639
- $this->logger->debug(sprintf(("Writing dump header for %s database in file"), $database, $file));
640
-
641
- $return = "";
642
-
643
- $return .= "#\n";
644
- $return .= "# Powered by XCloner Site Backup\n";
645
- $return .= "# http://www.xcloner.com\n";
646
- $return .= "#\n";
647
- $return .= "# Host: ".get_site_url()."\n";
648
- $return .= "# Generation Time: ".date("M j, Y \a\\t H:i")."\n";
649
- $return .= "# PHP Version: ".phpversion()."\n";
650
- $return .= "# Database Charset: ".$this->charset."\n";
651
-
652
- $results = $this->get_results("SHOW VARIABLES LIKE \"%version%\";", ARRAY_N);
653
- if (isset($results)) {
654
- foreach ($results as $result) {
655
- $return .= "# MYSQL ".$result[0].": ".$result[1]."\n";
656
- }
657
- }
658
-
659
- $results = $this->get_results("SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
660
- FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '".$database."';");
661
-
662
- if (isset($results[0])) {
663
- $return .= "# MYSQL DEFAULT_CHARACTER_SET_NAME: ".$results[0]->DEFAULT_CHARACTER_SET_NAME."\n";
664
- $return .= "# MYSQL SCHEMA_NAME: ".$results[0]->DEFAULT_COLLATION_NAME."\n";
665
- }
666
-
667
- $return .= "#\n# Database : `".$database."`\n# --------------------------------------------------------\n\n";
668
-
669
- $this->log(sprintf(__("Writing %s database dump headers"), $database));
670
-
671
- $return = $this->fs->get_tmp_filesystem()->write($file, $return);
672
- return $return['size'];
673
- }
674
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-encryption.php DELETED
@@ -1,395 +0,0 @@
1
- <?php
2
- /**
3
- * Created by PhpStorm.
4
- * User: thinkovi
5
- * Date: 2018-11-27
6
- * Time: 12:11
7
- */
8
-
9
- //namespace XCloner;
10
-
11
- /**
12
- * Xcloner_Encryption class
13
- */
14
- class Xcloner_Encryption
15
- {
16
- const FILE_ENCRYPTION_BLOCKS = 1024 * 1024;
17
- const FILE_ENCRYPTION_SUFFIX = ".encrypted";
18
- const FILE_DECRYPTION_SUFFIX = ".decrypted";
19
-
20
- private $xcloner_settings;
21
- private $logger;
22
- private $xcloner_container;
23
- private $verification = false;
24
-
25
- /**
26
- * Xcloner_Encryption constructor.
27
- * @param Xcloner $xcloner_container
28
- */
29
- public function __construct(Xcloner $xcloner_container)
30
- {
31
- $this->xcloner_container = $xcloner_container;
32
- if (property_exists($xcloner_container, 'xcloner_settings')) {
33
- $this->xcloner_settings = $xcloner_container->get_xcloner_settings();
34
- } else {
35
- $this->xcloner_settings = "";
36
- }
37
-
38
- if (property_exists($xcloner_container, 'xcloner_logger')) {
39
- $this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_encryption");
40
- } else {
41
- $this->logger = "";
42
- }
43
- }
44
-
45
- /**
46
- * Returns the backup encryption key
47
- *
48
- * @return string|null
49
- */
50
- public function get_backup_encryption_key()
51
- {
52
- if (is_object($this->xcloner_settings)) {
53
- return $this->xcloner_settings->get_xcloner_encryption_key();
54
- }
55
-
56
- return null;
57
- }
58
-
59
- /**
60
- * Check if provided filename has encrypted suffix
61
- *
62
- * @param $filename
63
- * @return bool
64
- */
65
- public function is_encrypted_file($filename)
66
- {
67
- $fp = fopen($this->get_xcloner_path().$filename, 'r');
68
- if (is_resource($fp)) {
69
- $encryption_length = fread($fp, 16);
70
- fclose($fp);
71
- if (is_numeric($encryption_length)) {
72
- return true;
73
- }
74
- }
75
-
76
- return false;
77
- }
78
-
79
- /**
80
- * Returns the filename with encrypted suffix
81
- *
82
- * @param string $filename
83
- * @return string
84
- */
85
- public function get_encrypted_target_backup_file_name($filename)
86
- {
87
- return str_replace(self::FILE_DECRYPTION_SUFFIX, "", $filename).self::FILE_ENCRYPTION_SUFFIX;
88
- }
89
-
90
- /**
91
- * Returns the filename without encrypted suffix
92
- *
93
- * @param string $filename
94
- * @return string
95
- */
96
- public function get_decrypted_target_backup_file_name($filename)
97
- {
98
- return str_replace(self::FILE_ENCRYPTION_SUFFIX, "", $filename).self::FILE_DECRYPTION_SUFFIX;
99
- }
100
-
101
- /**
102
- * Encrypt the passed file and saves the result in a new file with ".enc" as suffix.
103
- *
104
- * @param string $source Path to file that should be encrypted
105
- * @param string $dest File name where the encryped file should be written to.
106
- * @param string $key The key used for the encryption
107
- * @param int $start Start position for reading when doing incremental mode.
108
- * @param string $iv The IV key to use.
109
- * @param bool $verification Weather we should we try to verify the decryption.
110
- * @return array|false Returns array or FALSE if an error occured
111
- * @throws Exception
112
- */
113
- public function encrypt_file($source, $dest = "", $key = "", $start = 0, $iv = 0, $verification = true, $recursive = false)
114
- {
115
- if (is_object($this->logger)) {
116
- $this->logger->info(sprintf('Encrypting file %s at position %d IV %s', $source, $start, base64_encode($iv)));
117
- }
118
-
119
- //$key = substr(sha1($key, true), 0, 16);
120
- if (!$key) {
121
- $key = $this->get_backup_encryption_key();
122
- }
123
- $key_digest = openssl_digest($key, "md5", true);
124
-
125
- $keep_local = 1;
126
- if (!$dest) {
127
- $dest = $this->get_encrypted_target_backup_file_name($source);
128
- $keep_local = 0;
129
- }
130
-
131
- if (!$iv || !$start) {
132
- //$iv = openssl_random_pseudo_bytes(16);
133
- $iv = str_pad(self::FILE_ENCRYPTION_BLOCKS, 16, "0000000000000000", STR_PAD_LEFT);
134
- }
135
-
136
- if (!$start) {
137
- $fpOut = fopen($this->get_xcloner_path().$dest, 'w');
138
- } else {
139
- $fpOut = fopen($this->get_xcloner_path().$dest, 'a');
140
- }
141
-
142
- if (is_resource($fpOut)) {
143
-
144
- // Put the initialization vector to the beginning of the file
145
- if (!$start) {
146
- fwrite($fpOut, $iv);
147
- }
148
-
149
- if (file_exists($this->get_xcloner_path().$source) &&
150
- $fpIn = fopen($this->get_xcloner_path().$source, 'rb')) {
151
- fseek($fpIn, (int)$start);
152
-
153
- if (!feof($fpIn)) {
154
- $plaintext = fread($fpIn, 16 * self::FILE_ENCRYPTION_BLOCKS);
155
- $ciphertext = openssl_encrypt($plaintext, 'AES-128-CBC', $key_digest, OPENSSL_RAW_DATA, $iv);
156
-
157
- // Use the first 16 bytes of the ciphertext as the next initialization vector
158
- $iv = substr($ciphertext, 0, 16);
159
- //$iv = openssl_random_pseudo_bytes(16);
160
-
161
- fwrite($fpOut, $ciphertext);
162
-
163
- $start = ftell($fpIn);
164
-
165
- fclose($fpOut);
166
-
167
- unset($ciphertext);
168
- unset($plaintext);
169
-
170
- if (!feof($fpIn)) {
171
- fclose($fpIn);
172
- //echo "\n NEW:".$key.md5($iv);
173
- //self::encryptFile($source, $dest, $key, $start, $iv);
174
- if ($recursive) {
175
- $this->encrypt_file($source, $dest, $key, $start, ($iv), $verification, $recursive);
176
- } else {
177
- if (($iv) != base64_decode(base64_encode($iv))) {
178
- throw new \Exception('Could not encode IV for transport');
179
- }
180
-
181
- return array(
182
- "start" => $start,
183
- "iv" => base64_encode($iv),
184
- "target_file" => $dest,
185
- "finished" => 0
186
- );
187
- }
188
- }
189
- }
190
- } else {
191
- if (is_object($this->logger)) {
192
- $this->logger->error('Unable to read source file for encryption.');
193
- }
194
- throw new \Exception("Unable to read source file for encryption.");
195
- }
196
- } else {
197
- if (is_object($this->logger)) {
198
- $this->logger->error('Unable to write destination file for encryption.');
199
- }
200
- throw new \Exception("Unable to write destination file for encryption.");
201
- }
202
-
203
- if ($verification) {
204
- $this->verify_encrypted_file($dest);
205
- }
206
-
207
- //we replace the original backup with the encrypted one
208
- if (!$keep_local && copy(
209
- $this->get_xcloner_path().$dest,
210
- $this->get_xcloner_path().$source
211
- )) {
212
- unlink($this->get_xcloner_path().$dest);
213
- }
214
-
215
-
216
- return array("target_file" => $dest, "finished" => 1);
217
- }
218
-
219
- /**
220
- * @param string $file
221
- */
222
- public function verify_encrypted_file($file)
223
- {
224
- if (is_object($this->logger)) {
225
- $this->logger->info(sprintf('Verifying encrypted file %s', $file));
226
- }
227
-
228
- $this->verification = true;
229
- $this->decrypt_file($file);
230
- $this->verification = false;
231
- }
232
-
233
- /**
234
- * Dencrypt the passed file and saves the result in a new file, removing the
235
- * last 4 characters from file name.
236
- *
237
- * @param string $source Path to file that should be decrypted
238
- * @param string $dest File name where the decryped file should be written to.
239
- * @param string $key The key used for the decryption (must be the same as for encryption)
240
- * @param int $start Start position for reading when doing incremental mode.
241
- * @param string $iv The IV key to use.
242
- * @return array|false Returns array or FALSE if an error occured
243
- * @throws Exception
244
- */
245
- public function decrypt_file($source, $dest = "", $key = "", $start = 0, $iv = 0, $recursive = false)
246
- {
247
- if (is_object($this->logger)) {
248
- $this->logger->info(sprintf('Decrypting file %s at position %d with IV %s', $source, $start, base64_encode($iv)));
249
- }
250
-
251
- //$key = substr(sha1($key, true), 0, 16);
252
- if (!$key) {
253
- $key = $this->get_backup_encryption_key();
254
- }
255
-
256
- $key_digest = openssl_digest($key, "md5", true);
257
-
258
- $keep_local = 1;
259
- if (!$dest) {
260
- $dest = $this->get_decrypted_target_backup_file_name($source);
261
- $keep_local = 0;
262
- }
263
-
264
- if (!$start) {
265
- if ($this->verification) {
266
- $fpOut = fopen("php://stdout", 'w');
267
- } else {
268
- $fpOut = fopen($this->get_xcloner_path().$dest, 'w');
269
- }
270
- } else {
271
- if ($this->verification) {
272
- $fpOut = fopen("php://stdout", 'a');
273
- } else {
274
- $fpOut = fopen($this->get_xcloner_path().$dest, 'a');
275
- }
276
- }
277
-
278
- if (is_resource($fpOut)) {
279
- if (file_exists($this->get_xcloner_path().$source) &&
280
- $fpIn = fopen($this->get_xcloner_path().$source, 'rb')) {
281
- $encryption_length = (int)fread($fpIn, 16);
282
- if (!$encryption_length) {
283
- $encryption_length = self::FILE_ENCRYPTION_BLOCKS;
284
- }
285
-
286
- fseek($fpIn, (int)$start);
287
-
288
- // Get the initialzation vector from the beginning of the file
289
- if (!$iv) {
290
- $iv = fread($fpIn, 16);
291
- }
292
-
293
- if (!feof($fpIn)) {
294
-
295
- // we have to read one block more for decrypting than for encrypting
296
- $ciphertext = fread($fpIn, 16 * ($encryption_length + 1));
297
- $plaintext = openssl_decrypt($ciphertext, 'AES-128-CBC', $key_digest, OPENSSL_RAW_DATA, $iv);
298
-
299
- if (!$plaintext) {
300
- unlink($this->get_xcloner_path().$dest);
301
- if (is_object($this->logger)) {
302
- $this->logger->error('Backup decryption failed, please check your provided Encryption Key.');
303
- }
304
- throw new \Exception("Backup decryption failed, please check your provided Encryption Key.");
305
- }
306
-
307
- // Use the first 16 bytes of the ciphertext as the next initialization vector
308
- $iv = substr($ciphertext, 0, 16);
309
-
310
- if (!$this->verification) {
311
- fwrite($fpOut, $plaintext);
312
- }
313
-
314
- $start = ftell($fpIn);
315
-
316
- fclose($fpOut);
317
-
318
- if (!feof($fpIn)) {
319
- fclose($fpIn);
320
- if ($this->verification || $recursive) {
321
- unset($ciphertext);
322
- unset($plaintext);
323
- $this->decrypt_file($source, $dest, $key, $start, $iv, $recursive);
324
- } else {
325
- if (($iv) != base64_decode(base64_encode($iv))) {
326
- throw new \Exception('Could not encode IV for transport');
327
- }
328
-
329
- return array(
330
- "start" => $start,
331
- "encryption_length" => $encryption_length,
332
- "iv" => base64_encode($iv),
333
- "target_file" => $dest,
334
- "finished" => 0
335
- );
336
- }
337
- }
338
- }
339
- } else {
340
- if (is_object($this->logger)) {
341
- $this->logger->error('Unable to read source file for decryption');
342
- }
343
- throw new \Exception("Unable to read source file for decryption");
344
- }
345
- } else {
346
- if (is_object($this->logger)) {
347
- $this->logger->error('Unable to write destination file for decryption');
348
- }
349
- throw new \Exception("Unable to write destination file for decryption");
350
- }
351
-
352
- //we replace the original backup with the encrypted one
353
- if (!$keep_local && !$this->verification && copy(
354
- $this->get_xcloner_path().$dest,
355
- $this->get_xcloner_path().$source
356
- )) {
357
- unlink($this->get_xcloner_path().$dest);
358
- }
359
-
360
- return array("target_file" => $dest, "finished" => 1);
361
- }
362
-
363
- public function get_xcloner_path()
364
- {
365
- if (is_object($this->xcloner_settings)) {
366
- return $this->xcloner_settings->get_xcloner_store_path().DS;
367
- }
368
-
369
- return null;
370
- }
371
- }
372
-
373
-
374
- try {
375
- if (isset($argv[1])) {
376
- class Xcloner
377
- {
378
- /**
379
- * Xcloner constructor.
380
- */
381
- public function __construct()
382
- {
383
- }
384
- }
385
- $xcloner_encryption = new Xcloner_Encryption(new Xcloner());
386
-
387
- if ($argv[1] == "-e") {
388
- $xcloner_encryption->encrypt_file($argv[2], $argv[2].".enc", $argv[4], 0, 0, false, true);
389
- } elseif ($argv[1] == "-d") {
390
- $xcloner_encryption->decrypt_file($argv[2], $argv[2].".dec", $argv[4], 0, 0, true);
391
- }
392
- }
393
- } catch (\Exception $e) {
394
- echo "CAUGHT: ".$e->getMessage();
395
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-file-system.php DELETED
@@ -1,1114 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner - Backup and Restore backup plugin for Wordpress
4
- *
5
- * class-xcloner-file-system.php
6
- * @author Liuta Ovidiu <info@thinkovi.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
- * MA 02110-1301, USA.
22
- *
23
- * @link https://github.com/ovidiul/XCloner-Wordpress
24
- *
25
- * @modified 7/31/18 3:46 PM
26
- *
27
- */
28
-
29
- use League\Flysystem\Config;
30
- use League\Flysystem\Filesystem;
31
- use League\Flysystem\Util;
32
- use League\Flysystem\Adapter\Local;
33
-
34
- /**
35
- * Class Xcloner_File_System
36
- */
37
- class Xcloner_File_System
38
- {
39
- private $excluded_files = "";
40
- private $additional_regex_patterns = array();
41
- private $excluded_files_by_default = array("administrator/backups", "wp-content/backups");
42
- private $included_files_handler = "backup_files.csv";
43
- private $temp_dir_handler = ".dir";
44
- public $filesystem;
45
- public $tmp_filesystem;
46
- public $storage_filesystem;
47
- private $xcloner_container;
48
- private $diff_timestamp_start = "";
49
-
50
- private $logger;
51
- private $start_adapter;
52
- private $tmp_adapter;
53
- private $storage_adapter;
54
- private $xcloner_settings;
55
- private $start_filesystem;
56
- private $tmp_filesystem_append;
57
- private $storage_filesystem_append;
58
-
59
- private $files_counter;
60
- private $files_size;
61
- private $last_logged_file;
62
- private $folders_to_process_per_session = 25;
63
- private $backup_archive_extensions = array("tar", "tgz", "tar.gz", "gz", "csv", "encrypted", "decrypted");
64
- private $backup_name_tags = array('[time]', '[hostname]', '[domain]', '[hash]');
65
-
66
- /**
67
- * Xcloner_File_System constructor.
68
- * @param Xcloner $xcloner_container
69
- * @param string $hash
70
- */
71
- public function __construct(Xcloner $xcloner_container, $hash = "")
72
- {
73
- $this->xcloner_container = $xcloner_container;
74
-
75
- $this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_file_system");
76
- $this->xcloner_settings = $xcloner_container->get_xcloner_settings();
77
-
78
- try {
79
- $this->start_adapter = new Local($this->xcloner_settings->get_xcloner_start_path(), LOCK_EX, '0001');
80
- $this->start_filesystem = new Filesystem($this->start_adapter, new Config([
81
- 'disable_asserts' => true,
82
- ]));
83
-
84
- $this->tmp_adapter = new Local($this->xcloner_settings->get_xcloner_tmp_path(), LOCK_EX, '0001');
85
- $this->tmp_filesystem = new Filesystem($this->tmp_adapter, new Config([
86
- 'disable_asserts' => true,
87
- ]));
88
- $adapter = new Local($this->xcloner_settings->get_xcloner_tmp_path(), LOCK_EX | FILE_APPEND, '0001');
89
- $this->tmp_filesystem_append = new Filesystem($adapter, new Config([
90
- 'disable_asserts' => true,
91
- ]));
92
-
93
- $adapter = new Local($this->xcloner_settings->get_xcloner_store_path(), LOCK_EX, '0001');
94
- $this->storage_filesystem = new Filesystem($adapter, new Config([
95
- 'disable_asserts' => true,
96
- ]));
97
-
98
- $this->storage_adapter = new Local(
99
- $this->xcloner_settings->get_xcloner_store_path(),
100
- FILE_APPEND,
101
- '0001'
102
- );
103
- $this->storage_filesystem_append = new Filesystem($this->storage_adapter, new Config([
104
- 'disable_asserts' => true,
105
- ]));
106
- } catch (Exception $e) {
107
- $this->logger->error("Filesystem Initialization Error: ".$e->getMessage());
108
- }
109
-
110
-
111
- if ($value = $this->xcloner_settings->get_xcloner_option('xcloner_directories_to_scan_per_request')) {
112
- $this->folders_to_process_per_session = $value;
113
- }
114
- }
115
-
116
- /**
117
- * Set differential timestamp date
118
- * @param string $timestamp
119
- */
120
- public function set_diff_timestamp_start($timestamp = "")
121
- {
122
- if ($timestamp) {
123
- $this->logger->info(sprintf("Setting Differential Timestamp To %s", date("Y-m-d", $timestamp)), array(
124
- "FILESYSTEM",
125
- "DIFF"
126
- ));
127
- $this->diff_timestamp_start = $timestamp;
128
- }
129
- }
130
-
131
- /**
132
- * Gets the differential timestamp date
133
- * @return string
134
- */
135
- public function get_diff_timestamp_start()
136
- {
137
- return $this->diff_timestamp_start;
138
- }
139
-
140
- private function get_xcloner_container()
141
- {
142
- return $this->xcloner_container;
143
- }
144
-
145
- public function set_hash($hash)
146
- {
147
- $this->xcloner_settings->set_hash($hash);
148
- }
149
-
150
- public function get_hash($hash)
151
- {
152
- $this->xcloner_settings->get_hash();
153
- }
154
-
155
- public function get_tmp_filesystem()
156
- {
157
- return $this->tmp_filesystem;
158
- }
159
-
160
- public function get_storage_filesystem($remote_storage_selection = "")
161
- {
162
- if ($remote_storage_selection != "") {
163
- $remote_storage = $this->get_xcloner_container()->get_xcloner_remote_storage();
164
- $method = "get_".$remote_storage_selection."_filesystem";
165
-
166
- if (!method_exists($remote_storage, $method)) {
167
- return false;
168
- }
169
-
170
- list($adapter, $filesystem) = $remote_storage->$method();
171
-
172
- return $filesystem;
173
- }
174
-
175
- return $this->storage_filesystem;
176
- }
177
-
178
- public function get_tmp_filesystem_adapter()
179
- {
180
- return $this->tmp_adapter;
181
- }
182
-
183
- public function get_tmp_filesystem_append()
184
- {
185
- return $this->tmp_filesystem_append;
186
- }
187
-
188
- public function get_start_adapter()
189
- {
190
- return $this->start_adapter;
191
- }
192
-
193
- public function get_start_filesystem()
194
- {
195
- return $this->start_filesystem;
196
- }
197
-
198
- public function get_logger()
199
- {
200
- return $this->logger;
201
- }
202
-
203
- public function get_start_path_file_info($file)
204
- {
205
- $info = $this->getMetadataFull('start_adapter', $file);
206
-
207
- return $this->start_filesystem->normalizeFileInfo($info);
208
- }
209
-
210
- /**
211
- * @param string $file
212
- */
213
- public function get_storage_path_file_info($file)
214
- {
215
- return $this->getMetadataFull('storage_adapter', $file);
216
- }
217
-
218
- public function get_included_files_handler($metadata = 0)
219
- {
220
- $path = $this->included_files_handler;
221
- if (!$metadata) {
222
- return $path;
223
- }
224
-
225
- $spl_info = $this->getMetadataFull('tmp_adapter', $path);
226
-
227
- return $spl_info;
228
- }
229
-
230
- public function get_temp_dir_handler()
231
- {
232
- return $this->temp_dir_handler;
233
- }
234
-
235
- public function get_latest_backup()
236
- {
237
- $files = $this->get_backup_archives_list();
238
-
239
- if (is_array($files)) {
240
- $this->sort_by($files, "timestamp", "desc");
241
- }
242
-
243
- $new_list = array();
244
-
245
- foreach ($files as $key => $file) {
246
- if (!isset($file['parent'])) {
247
- $new_list[] = ($files[$key]);
248
- }
249
- }
250
-
251
- if (isset($new_list[0])) {
252
- return $new_list[0];
253
- }
254
- }
255
-
256
- public function get_latest_backups()
257
- {
258
- $files = $this->get_backup_archives_list();
259
-
260
- if (is_array($files)) {
261
- $this->sort_by($files, "timestamp", "desc");
262
- }
263
-
264
- $new_list = array();
265
-
266
- foreach ($files as $key => $file) {
267
- if (!isset($file['parent'])) {
268
- $new_list[] = ($files[$key]);
269
- }
270
- }
271
-
272
- return $new_list;
273
- }
274
-
275
- public function get_storage_usage()
276
- {
277
- $files = $this->get_backup_archives_list();
278
- $total = 0;
279
-
280
- if (is_array($files)) {
281
- foreach ($files as $file) {
282
- $total += $file['size'];
283
- }
284
- }
285
-
286
- return $total;
287
- }
288
-
289
- public function is_part($backup_name)
290
- {
291
- if (stristr($backup_name, "-part")) {
292
- return true;
293
- }
294
-
295
- return false;
296
- }
297
-
298
- public function is_multipart($backup_name)
299
- {
300
- if (stristr($backup_name, "-multipart")) {
301
- return true;
302
- }
303
-
304
- return false;
305
- }
306
-
307
- public function get_backup_size($backup_name)
308
- {
309
- $backup_size = $this->get_storage_filesystem()->getSize($backup_name);
310
- if ($this->is_multipart($backup_name)) {
311
- $backup_parts = $this->get_multipart_files($backup_name);
312
- foreach ($backup_parts as $part_file) {
313
- $backup_size += $this->get_storage_filesystem()->getSize($part_file);
314
- }
315
- }
316
-
317
- return $backup_size;
318
- }
319
-
320
- public function get_multipart_files($backup_name, $storage_selection = "")
321
- {
322
- $files = array();
323
-
324
- if ($this->is_multipart($backup_name)) {
325
- $lines = explode(PHP_EOL, $this->get_storage_filesystem($storage_selection)->read($backup_name));
326
- foreach ($lines as $line) {
327
- if ($line) {
328
- $data = str_getcsv($line);
329
- $files[] = $data[0];
330
- }
331
- }
332
- }
333
-
334
- return $files;
335
- }
336
-
337
- public function delete_backup_by_name($backup_name, $storage_selection = "")
338
- {
339
- if ($this->is_multipart($backup_name)) {
340
- $lines = explode(PHP_EOL, $this->get_storage_filesystem($storage_selection)->read($backup_name));
341
- foreach ($lines as $line) {
342
- if ($line) {
343
- $data = str_getcsv($line);
344
- $this->get_storage_filesystem($storage_selection)->delete($data[0]);
345
- }
346
- }
347
- }
348
-
349
- if ($this->get_storage_filesystem($storage_selection)->delete($backup_name)) {
350
- $return = true;
351
- } else {
352
- $return = false;
353
- }
354
-
355
- return $return;
356
- }
357
-
358
- public function getMetadataFull($adapter = "storage_adapter", $path)
359
- {
360
- $location = $this->$adapter->applyPathPrefix($path);
361
- $spl_info = new SplFileInfo($location);
362
-
363
- return ($spl_info);
364
- }
365
-
366
-
367
- public function get_backup_archives_list($storage_selection = "")
368
- {
369
- $list = array();
370
-
371
-
372
- if (method_exists($this->get_storage_filesystem($storage_selection), "listContents")) {
373
- $list = $this->get_storage_filesystem($storage_selection)->listContents();
374
- }
375
-
376
- $backup_files = array();
377
- $parents = array();
378
-
379
- foreach ($list as $file_info) {
380
- if (isset($file_info['extension']) and $file_info['extension'] == "csv") {
381
- $data = array();
382
-
383
- $lines = explode(PHP_EOL, $this->get_storage_filesystem($storage_selection)->read($file_info['path']));
384
- foreach ($lines as $line) {
385
- if ($line) {
386
- $data = str_getcsv($line);
387
- if (is_array($data)) {
388
- $parents[$data[0]] = $file_info['basename'];
389
- $file_info['childs'][] = $data;
390
- $file_info['size'] += $data[2];
391
- }
392
- }
393
- }
394
- }
395
-
396
- if ($file_info['type'] == 'file' and isset($file_info['extension']) and in_array(
397
- $file_info['extension'],
398
- $this->backup_archive_extensions
399
- )) {
400
- $backup_files[$file_info['path']] = $file_info;
401
- }
402
- }
403
-
404
- foreach ($backup_files as $key => $file_info) {
405
- if (!isset($backup_files[$key]['timestamp'])) {
406
- //$backup_files[$key]['timestamp'] = $this->get_storage_filesystem($storage_selection)->getTimestamp($file_info['path']);
407
- }
408
-
409
- if (isset($parents[$file_info['basename']])) {
410
- $backup_files[$key]['parent'] = $parents[$file_info['basename']];
411
- }
412
- }
413
-
414
- return $backup_files;
415
- }
416
-
417
- public function start_file_recursion($init = 0)
418
- {
419
- if ($init) {
420
- $this->logger->info(sprintf(
421
- __("Starting the filesystem scanner on root folder %s"),
422
- $this->xcloner_settings->get_xcloner_start_path()
423
- ));
424
- $this->do_system_init();
425
- }
426
-
427
- if ($this->tmp_filesystem->has($this->get_temp_dir_handler())) {
428
- //.dir exists, we presume we have files to iterate
429
- $content = $this->tmp_filesystem->read($this->get_temp_dir_handler());
430
- $files = array_filter(explode("\n", $content));
431
- $this->tmp_filesystem->delete($this->get_temp_dir_handler());
432
-
433
- $counter = 0;
434
- foreach ($files as $file) {
435
- if ($counter < $this->folders_to_process_per_session) {
436
- $this->build_files_list($file);
437
- $counter++;
438
- } else {
439
- $this->tmp_filesystem_append->write($this->get_temp_dir_handler(), $file."\n");
440
- }
441
- }
442
- } else {
443
- $this->build_files_list();
444
- }
445
-
446
- if ($this->scan_finished()) {
447
- $metadata_dumpfile = $this->get_tmp_filesystem()->getMetadata("index.html");
448
- $this->store_file($metadata_dumpfile, 'tmp_filesystem');
449
- $this->files_counter++;
450
-
451
- //adding included dump file to the included files list
452
- if ($this->get_tmp_filesystem()->has($this->get_included_files_handler())) {
453
- $metadata_dumpfile = $this->get_tmp_filesystem()->getMetadata($this->get_included_files_handler());
454
- $this->store_file($metadata_dumpfile, 'tmp_filesystem');
455
- $this->files_counter++;
456
- }
457
-
458
- //adding a default index.html to the temp xcloner folder
459
- if (!$this->get_tmp_filesystem()->has("index.html")) {
460
- $this->get_tmp_filesystem()->write("index.html", "");
461
- }
462
-
463
- //adding the default log file
464
- if ($this->get_tmp_filesystem()->has($this->xcloner_settings->get_logger_filename(1))) {
465
- $metadata_dumpfile = $this->get_tmp_filesystem()->getMetadata($this->xcloner_settings->get_logger_filename(1));
466
- $this->store_file($metadata_dumpfile, 'tmp_filesystem');
467
- $this->files_counter++;
468
- }
469
-
470
- return false;
471
- }
472
-
473
- return true;
474
- }
475
-
476
- public function get_backup_attachments()
477
- {
478
- $return = array();
479
-
480
- $files_list_file = $this->xcloner_settings->get_xcloner_tmp_path().DS.$this->get_included_files_handler();
481
- if (file_exists($files_list_file)) {
482
- $return[] = $files_list_file;
483
- }
484
-
485
- if ($this->xcloner_settings->get_xcloner_option('xcloner_enable_log')) {
486
- $log_file = $this->xcloner_settings->get_xcloner_tmp_path().DS.$this->xcloner_settings->get_logger_filename(1);
487
- if (!file_exists($log_file)) {
488
- $log_file = $this->xcloner_settings->get_xcloner_store_path().DS.$this->xcloner_settings->get_logger_filename();
489
- }
490
-
491
- if (file_exists($log_file)) {
492
- $return[] = $log_file;
493
- }
494
- }
495
-
496
- return $return;
497
- }
498
-
499
- public function remove_tmp_filesystem()
500
- {
501
- //delete the temporary folder
502
- $this->logger->debug(sprintf(
503
- "Deleting the temporary storage folder %s",
504
- $this->xcloner_settings->get_xcloner_tmp_path()
505
- ));
506
-
507
- $contents = $this->get_tmp_filesystem()->listContents();
508
-
509
- if (is_array($contents)) {
510
- foreach ($contents as $file_info) {
511
- $this->get_tmp_filesystem()->delete($file_info['path']);
512
- }
513
- }
514
-
515
- try {
516
- rmdir($this->xcloner_settings->get_xcloner_tmp_path());
517
- } catch (Exception $e) {
518
- //silent continue
519
- }
520
-
521
- return;
522
- }
523
-
524
- public function cleanup_tmp_directories()
525
- {
526
- $this->logger->info(sprintf(("Cleaning up the temporary directories")));
527
-
528
- $adapter = new Local($this->xcloner_settings->get_xcloner_tmp_path(false), LOCK_EX, '0001');
529
- $tmp_filesystem = new Filesystem($adapter, new Config([
530
- 'disable_asserts' => true,
531
- ]));
532
-
533
- $contents = $tmp_filesystem->listContents();
534
-
535
- foreach ($contents as $file) {
536
- if (preg_match("/.xcloner-(.*)/", $file['path'])) {
537
- if ($file['timestamp'] < strtotime("-1days")) {
538
- $tmp_filesystem->deleteDir($file['path']);
539
- $this->logger->debug(sprintf("Delete temporary directory %s", $file['path']));
540
- }
541
- }
542
- }
543
-
544
- return true;
545
- }
546
-
547
- private function do_system_init()
548
- {
549
- $this->files_counter = 0;
550
-
551
- if (!$this->storage_filesystem->has("index.html")) {
552
- $this->storage_filesystem->write("index.html", "");
553
- }
554
-
555
- if (!$this->tmp_filesystem->has("index.html")) {
556
- $this->tmp_filesystem->write("index.html", "");
557
- }
558
-
559
- if ($this->tmp_filesystem->has($this->get_included_files_handler())) {
560
- $this->tmp_filesystem->delete($this->get_included_files_handler());
561
- }
562
-
563
- if ($this->tmp_filesystem->has($this->get_temp_dir_handler())) {
564
- $this->tmp_filesystem->delete($this->get_temp_dir_handler());
565
- }
566
- }
567
-
568
- public function get_scanned_files_num()
569
- {
570
- return $this->files_counter;
571
- }
572
-
573
- public function get_scanned_files_total_size()
574
- {
575
- return $this->files_size;
576
- }
577
-
578
- public function last_logged_file()
579
- {
580
- return $this->last_logged_file;
581
- }
582
-
583
- public static function is_regex($regex)
584
- {
585
- return preg_match("/^\^(.*)\$$/i", $regex);
586
- }
587
-
588
- public function set_excluded_files($excluded_files = array())
589
- {
590
- if (!is_array($excluded_files)) {
591
- $excluded_files = array();
592
- }
593
-
594
- foreach ($excluded_files as $excl) {
595
- if ($this->is_regex($excl)) {
596
- $this->additional_regex_patterns[] = $excl;
597
- }
598
- }
599
-
600
- $this->excluded_files = array_merge($excluded_files, $this->excluded_files_by_default);
601
-
602
- return $this->excluded_files;
603
- }
604
-
605
- public function get_excluded_files()
606
- {
607
- return $this->excluded_files_by_default;
608
- }
609
-
610
- public function list_directory($path)
611
- {
612
- return $this->start_filesystem->listContents($path);
613
- }
614
-
615
- public function build_files_list($folder = "")
616
- {
617
- $this->logger->debug(sprintf(("Building the files system list")));
618
-
619
- //if we start with the root folder(empty value), we initializa the file system
620
- if (!$folder) {
621
- }
622
-
623
- try {
624
- $files = $this->start_filesystem->listContents($folder);
625
- foreach ($files as $file) {
626
- if (!is_readable($this->xcloner_settings->get_xcloner_start_path().DS.$file['path'])) {
627
- $this->logger->info(sprintf(
628
- __("Excluding %s from the filesystem list, file not readable"),
629
- $file['path']
630
- ), array(
631
- "FILESYSTEM SCAN",
632
- "NOT READABLE"
633
- ));
634
- } elseif (!$matching_pattern = $this->is_excluded($file)) {
635
- $this->logger->info(sprintf(__("Adding %s to the filesystem list"), $file['path']), array(
636
- "FILESYSTEM SCAN",
637
- "INCLUDE"
638
- ));
639
- $file['visibility'] = $this->start_filesystem->getVisibility($file['path']);
640
- if ($this->store_file($file)) {
641
- $this->files_counter++;
642
- }
643
- if (isset($file['size'])) {
644
- $this->files_size += $file['size'];
645
- }
646
- } else {
647
- $this->logger->info(sprintf(
648
- __("Excluding %s from the filesystem list, matching pattern %s"),
649
- $file['path'],
650
- $matching_pattern
651
- ), array(
652
- "FILESYSTEM SCAN",
653
- "EXCLUDE"
654
- ));
655
- }
656
- }
657
- } catch (Exception $e) {
658
- $this->logger->error($e->getMessage());
659
- }
660
- }
661
-
662
- public function estimate_read_write_time()
663
- {
664
- $tmp_file = ".xcloner".substr(md5(time()), 0, 5);
665
-
666
- $start_time = microtime(true);
667
-
668
- $data = str_repeat(rand(0, 9), 1024 * 1024); //write 1MB data
669
-
670
- try {
671
- $this->tmp_filesystem->write($tmp_file, $data);
672
-
673
- $end_time = microtime(true) - $start_time;
674
-
675
- $return['writing_time'] = $end_time;
676
-
677
- $return['reading_time'] = $this->estimate_reading_time($tmp_file);
678
-
679
- $this->tmp_filesystem->delete($tmp_file);
680
- } catch (Exception $e) {
681
- $this->logger->error($e->getMessage());
682
- }
683
-
684
- return $return;
685
- }
686
-
687
- public function backup_storage_cleanup($storage_name = "local", $storage_filesystem = "")
688
- {
689
- //$storage_name = "webdav";
690
-
691
- $storage_name = strtoupper($storage_name);
692
-
693
- $this->logger->info(sprintf("Cleaning the backup storage %s on matching rules", $storage_name));
694
-
695
- if (!$storage_filesystem) {
696
- $storage_filesystem = $this->storage_filesystem;
697
- }
698
-
699
- $_storage_size = 0;
700
- $_backup_files_list = array();
701
-
702
- $options_prefix = $this->xcloner_settings->get_options_prefix()."_".($storage_name == "LOCAL"?"":strtolower( $storage_name)."_");
703
-
704
- //rule date limit
705
- $xcloner_cleanup_retention_limit_days = $options_prefix . "cleanup_retention_limit_days";
706
- $current_timestamp = strtotime("-".$this->xcloner_settings->get_xcloner_option($xcloner_cleanup_retention_limit_days)." days");
707
-
708
- $files = $storage_filesystem->listContents();
709
-
710
- if (is_array($files)) {
711
- foreach ($files as $file) {
712
- if (isset($file['extension']) and in_array($file['extension'], $this->backup_archive_extensions)) {
713
- $_storage_size += $file['size']; //bytes
714
- $_backup_files_list[] = $file;
715
- }
716
- }
717
- }
718
-
719
-
720
- $this->sort_by($_backup_files_list, "timestamp", "asc");
721
-
722
- $_backups_counter = sizeof($_backup_files_list);
723
-
724
- foreach ($_backup_files_list as $file) {
725
-
726
- // processing rule for exclude backups taken on certain days
727
- $xcloner_cleanup_exclude_days = $options_prefix . "cleanup_exclude_days";
728
- if ($exclude_days_string = $this->xcloner_settings->get_xcloner_option($xcloner_cleanup_exclude_days)) {
729
- $exclude_days = explode(",", $exclude_days_string);
730
-
731
- $backup_day_of_month = date('j', $file['timestamp']);
732
- if (in_array($backup_day_of_month, $exclude_days)) {
733
- $this->logger->info(sprintf("Excluding %s from storage %s cleanup trashing as it was taken on month day %s ",
734
- $file['path'],
735
- $storage_name,
736
- $backup_day_of_month)
737
- );
738
- continue;
739
- }
740
- }
741
-
742
- //processing rule folder capacity
743
- $xcloner_cleanup_capacity_limit = $options_prefix."cleanup_capacity_limit";
744
- if ($this->xcloner_settings->get_xcloner_option($xcloner_cleanup_capacity_limit) &&
745
- $_storage_size >= ($set_storage_limit = 1024 * 1024 * $this->xcloner_settings->get_xcloner_option('xcloner_cleanup_capacity_limit'))) { //bytes
746
- $storage_filesystem->delete($file['path']);
747
- $_storage_size -= $file['size'];
748
- $this->logger->info("Deleting backup ".$file['path']." from storage system ".$storage_name." matching rule", array(
749
- "STORAGE SIZE LIMIT",
750
- $_storage_size." >= ".$set_storage_limit
751
- ));
752
- }
753
-
754
- //processing rule days limit
755
- $xcloner_cleanup_retention_limit_days = $options_prefix . "cleanup_retention_limit_days";
756
- if ($this->xcloner_settings->get_xcloner_option($xcloner_cleanup_retention_limit_days) && $current_timestamp >= $file['timestamp']) {
757
- $storage_filesystem->delete($file['path']);
758
- $this->logger->info("Deleting backup ".$file['path']." from storage system ".$storage_name." matching rule", array(
759
- "RETENTION LIMIT TIMESTAMP",
760
- $file['timestamp']." =< ".$this->xcloner_settings->get_xcloner_option($xcloner_cleanup_retention_limit_days)
761
- ));
762
- }
763
-
764
- //processing backup countert limit
765
- $xcloner_cleanup_retention_limit_archives = $options_prefix . "cleanup_retention_limit_archives";
766
- if ($this->xcloner_settings->get_xcloner_option('xcloner_cleanup_retention_limit_archives') && $_backups_counter >= $this->xcloner_settings->get_xcloner_option('xcloner_cleanup_retention_limit_archives')) {
767
- $storage_filesystem->delete($file['path']);
768
- $_backups_counter--;
769
- $this->logger->info("Deleting backup ".$file['path']." from storage system ".$storage_name." matching rule", array(
770
- "BACKUP QUANTITY LIMIT",
771
- $_backups_counter." >= ".$this->xcloner_settings->get_xcloner_option($xcloner_cleanup_retention_limit_archives)
772
- ));
773
- }
774
- }
775
- }
776
-
777
- /**
778
- * @param string $tmp_file
779
- */
780
- public function estimate_reading_time($tmp_file)
781
- {
782
- $this->logger->debug(sprintf(("Estimating file system reading time")));
783
-
784
- $start_time = microtime(true);
785
-
786
- if ($this->tmp_filesystem->has($tmp_file)) {
787
- $this->tmp_filesystem->read($tmp_file);
788
- }
789
-
790
- $end_time = microtime(true) - $start_time;
791
-
792
- return $end_time;
793
- }
794
-
795
- public function process_backup_name($name = "", $max_length = 100)
796
- {
797
- if (!$name) {
798
- $name = $this->xcloner_settings->get_default_backup_name();
799
- }
800
-
801
- foreach ($this->backup_name_tags as $tag) {
802
- if ($tag == '[time]') {
803
- $name = str_replace($tag, date("Y-m-d_H-i"), $name);
804
- } elseif ($tag == '[hostname]') {
805
- $name = str_replace($tag, gethostname(), $name);
806
- } elseif ($tag == '[hash]') {
807
- $name = str_replace($tag, $this->xcloner_container->randomString(5), $name);
808
- } elseif ($tag == '[domain]') {
809
- $domain = parse_url(admin_url(), PHP_URL_HOST);
810
- $name = str_replace($tag, $domain, $name);
811
- }
812
- }
813
-
814
- if ($max_length) {
815
- $name = substr($name, 0, $max_length);
816
- }
817
-
818
- return $name;
819
- }
820
-
821
- /**
822
- * @param string $field
823
- */
824
- public function sort_by(&$array, $field, $direction = 'asc')
825
- {
826
- if (strtolower($direction) == "desc" || $direction == SORT_DESC) {
827
- $direction = SORT_DESC;
828
- } else {
829
- $direction = SORT_ASC;
830
- }
831
-
832
- $array = $this->array_orderby($array, $field, $direction);
833
-
834
- return true;
835
- }
836
-
837
- private function array_orderby()
838
- {
839
- $args = func_get_args();
840
- $data = array_shift($args);
841
-
842
- foreach ($args as $n => $field) {
843
- if (is_string($field)) {
844
- $tmp = array();
845
- foreach ($data as $key => $row) {
846
- if (is_array($row)) {
847
- $tmp[$key] = $row[$field];
848
- } else {
849
- $tmp[$key] = $row->$field;
850
- }
851
- }
852
- $args[$n] = $tmp;
853
- }
854
- }
855
- $args[] = &$data;
856
-
857
- call_user_func_array('array_multisort', $args);
858
-
859
- return array_pop($args);
860
- }
861
-
862
- private function check_file_diff_time($file)
863
- {
864
- if ($this->get_diff_timestamp_start() != "") {
865
- $fileMeta = $this->getMetadataFull("start_adapter", $file['path']);
866
- $timestamp = $fileMeta->getMTime();
867
- if ($timestamp < $fileMeta->getCTime()) {
868
- $timestamp = $fileMeta->getCTime();
869
- }
870
-
871
- if ($timestamp <= $this->get_diff_timestamp_start()) {
872
- return " file DIFF timestamp ".$timestamp." < ".$this->diff_timestamp_start;
873
- }
874
- }
875
-
876
- return false;
877
- }
878
-
879
- public function is_excluded($file)
880
- {
881
- $this->logger->debug(sprintf(("Checking if %s is excluded"), $file['path']));
882
-
883
- if ($xcloner_exclude_files_larger_than_mb = $this->xcloner_settings->get_xcloner_option('xcloner_exclude_files_larger_than_mb')) {
884
- if (isset($file['size']) && $file['size'] > $this->calc_to_bytes($xcloner_exclude_files_larger_than_mb)) {
885
- return "> ".$xcloner_exclude_files_larger_than_mb."MB";
886
- }
887
- }
888
-
889
- if (!is_array($this->excluded_files) || !sizeof($this->excluded_files)) {
890
- $this->set_excluded_files();
891
- }
892
-
893
- if (is_array($this->excluded_files)) {
894
- foreach ($this->excluded_files as $excluded_file_pattern) {
895
- if ($excluded_file_pattern == "/") {
896
- $needle = "$";
897
- } else {
898
- $needle = "$".$excluded_file_pattern;
899
- }
900
-
901
- if (strstr("$".$file['path'], $needle)) {
902
- return $excluded_file_pattern;
903
- }
904
- }
905
- }
906
-
907
- if ($regex = $this->is_excluded_regex($file)) {
908
- return $regex;
909
- }
910
-
911
- if ($file['type'] == "file") {
912
- $check_file_diff_timestamp = $this->check_file_diff_time($file);
913
- if ($check_file_diff_timestamp) {
914
- return $check_file_diff_timestamp;
915
- }
916
- }
917
-
918
- return false;
919
- }
920
-
921
- /*REGEX examples
922
- *
923
- * exclude all except .php file
924
- * PATTERN: ^(.*)\.(.+)$(?<!(php))
925
- *
926
- * exclude all except .php and .txt
927
- * PATTERN: ^(.*)\.(.+)$(?<!(php|txt))";
928
- *
929
- * exclude all .svn and .git
930
- * PATTERN: ^(.*)\.(svn|git)(.*)$";
931
- *
932
- * exclude root directory /test
933
- * PATTERN: "^\/test(.*)$";
934
- *
935
- * exclude the wp-admin folder
936
- * PATTERN: ^(\/wp-admin)(.*)$";
937
- *
938
- * exclude the wp-admin, wp-includes and wp-config.php
939
- * PATTERN: ^\/(wp-admin|wp-includes|wp-config.php)(.*)$";
940
- *
941
- * exclude all .avi files
942
- * PATTERN: ^(.*)$(?<=(avi))";
943
- *
944
- * exclude all .jpg and gif files
945
- * PATTERN: ^(.*)$(?<=(gif|jpg))";
946
- *
947
- * exclude all cache folders from wp-content/
948
- * PATTERN: ^\/wp-content(.*)\/cache($|\/)(.*)";
949
- *
950
- * exclude the backup folders
951
- * PATTERN: (^|^\/)(wp-content\/backups|administrator\/backups)(.*)$";
952
- */
953
- private function is_excluded_regex($file)
954
- {
955
- //$this->logger->debug(sprintf(("Checking if %s is excluded"), $file['path']));
956
-
957
- $regex_patterns = explode(PHP_EOL, $this->xcloner_settings->get_xcloner_option('xcloner_regex_exclude'));
958
-
959
- if (is_array($this->additional_regex_patterns)) {
960
- $regex_patterns = array_merge($regex_patterns, $this->additional_regex_patterns);
961
- }
962
-
963
- //print_r($regex_patterns);exit;
964
-
965
- if (is_array($regex_patterns)) {
966
- //$this->excluded_files = array();
967
- //$this->excluded_files[] ="(.*)\.(git)(.*)$";
968
- //$this->excluded_files[] ="wp-content\/backups(.*)$";
969
-
970
- foreach ($regex_patterns as $excluded_file_pattern) {
971
- if (substr(
972
- $excluded_file_pattern,
973
- strlen($excluded_file_pattern) - 1,
974
- strlen($excluded_file_pattern)
975
- ) == "\r") {
976
- $excluded_file_pattern = substr($excluded_file_pattern, 0, strlen($excluded_file_pattern) - 1);
977
- }
978
-
979
- if ($file['path'] == "/") {
980
- $needle = "/";
981
- } else {
982
- $needle = "/".$file['path'];
983
- }
984
- //echo $needle."---".$excluded_file_pattern."---\n";
985
-
986
- if (@preg_match("/(^|^\/)".$excluded_file_pattern."/i", $needle)) {
987
- return $excluded_file_pattern;
988
- }
989
- }
990
- }
991
-
992
- return false;
993
- }
994
-
995
- public function store_file($file, $storage = 'start_filesystem')
996
- {
997
- $this->logger->debug(sprintf("Storing %s in the backup list", $file['path']));
998
-
999
- if (!isset($file['size'])) {
1000
- $file['size'] = 0;
1001
- }
1002
- if (!isset($file['visibility'])) {
1003
- $file['visibility'] = "private";
1004
- }
1005
-
1006
- $csv_filename = str_replace('"', '""', $file['path']);
1007
-
1008
- $line = '"'.($csv_filename).'","'.$file['timestamp'].'","'.$file['size'].'","'.$file['visibility'].'","'.$storage.'"'.PHP_EOL;
1009
-
1010
- $this->last_logged_file = $file['path'];
1011
-
1012
- if ($file['type'] == "dir") {
1013
- try {
1014
- $this->tmp_filesystem_append->write($this->get_temp_dir_handler(), $file['path']."\n");
1015
- } catch (Exception $e) {
1016
- $this->logger->error($e->getMessage());
1017
- }
1018
- }
1019
-
1020
- if ($this->get_diff_timestamp_start()) {
1021
- if ($file['type'] != "file" && $response = $this->check_file_diff_time($file)) {
1022
- $this->logger->info(sprintf(
1023
- "Directory %s archiving skipped on differential backup %s",
1024
- $file['path'],
1025
- $response
1026
- ), array(
1027
- "FILESYSTEM SCAN",
1028
- "DIR DIFF"
1029
- ));
1030
-
1031
- return false;
1032
- }
1033
- }
1034
-
1035
- try {
1036
- if (!$this->tmp_filesystem_append->has($this->get_included_files_handler())) {
1037
- //adding fix for UTF-8 CSV preview
1038
- $start_line = "\xEF\xBB\xBF".'"Filename","Timestamp","Size","Visibility","Storage"'.PHP_EOL;
1039
- $this->tmp_filesystem_append->write($this->get_included_files_handler(), $start_line);
1040
- }
1041
-
1042
- $this->tmp_filesystem_append->write($this->get_included_files_handler(), $line);
1043
- } catch (Exception $e) {
1044
- $this->logger->error($e->getMessage());
1045
- }
1046
-
1047
- return true;
1048
- }
1049
-
1050
- public function get_fileystem_handler()
1051
- {
1052
- return $this;
1053
- }
1054
-
1055
- public function get_filesystem($system = "")
1056
- {
1057
- if ($system == "storage_filesystem_append") {
1058
- return $this->storage_filesystem_append;
1059
- } elseif ($system == "tmp_filesystem_append") {
1060
- return $this->tmp_filesystem_append;
1061
- } elseif ($system == "tmp_filesystem") {
1062
- return $this->tmp_filesystem;
1063
- } elseif ($system == "storage_filesystem") {
1064
- return $this->storage_filesystem;
1065
- } else {
1066
- return $this->start_filesystem;
1067
- }
1068
- }
1069
-
1070
- public function get_adapter($system)
1071
- {
1072
- if ($system == "tmp_filesystem") {
1073
- return $this->tmp_adapter;
1074
- } elseif ($system == "storage_filesystem") {
1075
- return $this->storage_adapter;
1076
- } else {
1077
- return $this->start_adapter;
1078
- }
1079
- }
1080
-
1081
- /**
1082
- * File scan finished
1083
- * Method called when file scan is finished
1084
- *
1085
- * @return bool
1086
- */
1087
- private function scan_finished()
1088
- {
1089
- if ($this->tmp_filesystem_append->has($this->get_temp_dir_handler()) &&
1090
- $this->tmp_filesystem_append->getSize($this->get_temp_dir_handler())) {
1091
- return false;
1092
- }
1093
-
1094
- if ($this->tmp_filesystem->has($this->get_temp_dir_handler())) {
1095
- $this->tmp_filesystem->delete($this->get_temp_dir_handler());
1096
- }
1097
-
1098
- $this->logger->debug(sprintf(("File scan finished")));
1099
-
1100
- return true;
1101
- }
1102
-
1103
- /**
1104
- * Calculate bytes from MB value
1105
- *
1106
- * @param int $mb_size
1107
- *
1108
- * @return float|int
1109
- */
1110
- private function calc_to_bytes($mb_size)
1111
- {
1112
- return $mb_size * (1024 * 1024);
1113
- }
1114
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-file-transfer.php DELETED
@@ -1,165 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner - Backup and Restore backup plugin for Wordpress
4
- *
5
- * class-xcloner-file-transfer.php
6
- * @author Liuta Ovidiu <info@thinkovi.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
- * MA 02110-1301, USA.
22
- *
23
- * @link https://github.com/ovidiul/XCloner-Wordpress
24
- *
25
- * @modified 7/25/18 1:46 PM
26
- *
27
- */
28
-
29
- class Xcloner_File_Transfer extends Xcloner_File_System
30
- {
31
-
32
- /**
33
- * Target url web address of the restore script
34
- * @var string
35
- */
36
- private $target_url;
37
- /**
38
- * Transfer data limit in bytes
39
- * @var int
40
- */
41
- private $transfer_limit = 1048576; //bytes 1MB= 1048576 300KB = 358400
42
-
43
-
44
- /**
45
- * @param $target_url
46
- *
47
- * @return mixed
48
- */
49
- public function set_target($target_url)
50
- {
51
- return $this->target_url = $target_url;
52
- }
53
-
54
- /**
55
- * @return string
56
- */
57
- public function get_target()
58
- {
59
- return $this->target_url;
60
- }
61
-
62
-
63
- /**
64
- * @param $file
65
- * @param int $start
66
- * @param string $hash
67
- *
68
- * @return bool|int
69
- * @throws Exception
70
- */
71
- public function transfer_file($file, $start = 0, $hash = "")
72
- {
73
- if (!$this->target_url) {
74
- throw new Exception("Please setup a target url for upload");
75
- }
76
-
77
-
78
- $fp = $this->get_storage_filesystem()->readStream($file);
79
-
80
- fseek($fp, $start, SEEK_SET);
81
-
82
- $binary_data = fread($fp, $this->transfer_limit);
83
-
84
- $tmp_filename = "xcloner_upload_".substr(md5(time()), 0, 5);
85
-
86
- $this->get_tmp_filesystem()->write($tmp_filename, $binary_data);
87
-
88
- $tmp_file_path = $this->get_tmp_filesystem_adapter()->applyPathPrefix($tmp_filename);
89
-
90
- $send_array = array();
91
-
92
- $send_array['file'] = $file;
93
- $send_array['start'] = $start;
94
- $send_array['xcloner_action'] = "write_file";
95
- $send_array['hash'] = $hash;
96
- #$send_array['blob'] = $binary_data;
97
- $send_array['blob'] = $this->curl_file_create($tmp_file_path, 'application/x-binary', $tmp_filename);
98
-
99
- //$data = http_build_query($send_array);
100
-
101
- $this->get_logger()->info(sprintf("Sending curl request to %s with %s data of file %s starting position %s using temporary file %s",
102
- $this->target_url, $this->transfer_limit, $file, $start, $tmp_filename));
103
-
104
-
105
- $ch = curl_init();
106
- curl_setopt($ch, CURLOPT_URL, $this->target_url);
107
-
108
- curl_setopt($ch, CURLOPT_POST, 1);
109
- //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
110
- //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
111
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
112
- curl_setopt($ch, CURLOPT_TIMEOUT, 1200);
113
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
114
-
115
- curl_setopt($ch, CURLOPT_POSTFIELDS, $send_array);
116
- curl_setopt($ch, CURLOPT_VERBOSE, true);
117
-
118
- $original_result = curl_exec($ch);
119
-
120
-
121
- $this->get_tmp_filesystem()->delete($tmp_filename);
122
-
123
- $result = json_decode($original_result);
124
-
125
- if (!$result) {
126
- throw new Exception("We have received no valid response from the remote host, original message: ".$original_result);
127
- }
128
-
129
- if ($result->status != 200) {
130
- throw new Exception($result->response);
131
- }
132
-
133
- if (ftell($fp) >= $this->get_storage_filesystem()->getSize($file)) {
134
- $this->get_logger()->info(sprintf("Upload done for file %s to target url %s, transferred a total of %s bytes",
135
- $file, $this->target_url, ftell($fp)));
136
- $this->remove_tmp_filesystem();
137
-
138
- return false;
139
- }
140
-
141
- return ftell($fp);
142
- }
143
-
144
- /**
145
- * @param string $filename
146
- * @param string $mimetype
147
- * @param string $postname
148
- *
149
- * @return CURLFile|string
150
- */
151
- private function curl_file_create($filename, $mimetype = '', $postname = '')
152
- {
153
- if (!function_exists('curl_file_create')) {
154
-
155
- return "@$filename;filename="
156
- . ($postname ?: basename($filename))
157
- . ($mimetype ? ";type=$mimetype" : '');
158
-
159
- } else {
160
-
161
- return curl_file_create($filename, $mimetype, $postname);
162
-
163
- }
164
- }
165
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-i18n.php DELETED
@@ -1,61 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner - Backup and Restore backup plugin for Wordpress
4
- *
5
- * class-xcloner-i18n.php
6
- * @author Liuta Ovidiu <info@thinkovi.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
- * MA 02110-1301, USA.
22
- *
23
- * @link https://github.com/ovidiul/XCloner-Wordpress
24
- *
25
- * @modified 7/25/18 1:46 PM
26
- *
27
- */
28
-
29
-
30
- /**
31
- * Define the internationalization functionality.
32
- *
33
- * Loads and defines the internationalization files for this plugin
34
- * so that it is ready for translation.
35
- *
36
- * @since 1.0.0
37
- * @package Xcloner
38
- * @subpackage Xcloner/includes
39
- * @author Liuta Ovidiu <info@thinkovi.com>
40
- */
41
- class Xcloner_i18n
42
- {
43
-
44
- /**
45
- * Load the plugin text domain for translation.
46
- *
47
- * @since 1.0.0
48
- */
49
- public function load_plugin_textdomain()
50
- {
51
-
52
- load_plugin_textdomain(
53
- 'xcloner-backup-and-restore',
54
- false,
55
- dirname(dirname(plugin_basename(__FILE__))).'/languages/'
56
- );
57
-
58
- }
59
-
60
-
61
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-loader.php DELETED
@@ -1,167 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner - Backup and Restore backup plugin for Wordpress
4
- *
5
- * class-xcloner-loader.php
6
- * @author Liuta Ovidiu <info@thinkovi.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
- * MA 02110-1301, USA.
22
- *
23
- * @link https://github.com/ovidiul/XCloner-Wordpress
24
- *
25
- * @modified 7/25/18 1:46 PM
26
- *
27
- */
28
-
29
-
30
- /**
31
- * Register all actions and filters for the plugin.
32
- *
33
- * Maintain a list of all hooks that are registered throughout
34
- * the plugin, and register them with the WordPress API. Call the
35
- * run function to execute the list of actions and filters.
36
- *
37
- * @package Xcloner
38
- * @subpackage Xcloner/includes
39
- * @author Liuta Ovidiu <info@thinkovi.com>
40
- */
41
- class Xcloner_Loader
42
- {
43
-
44
- /**
45
- * The array of actions registered with WordPress.
46
- *
47
- * @since 1.0.0
48
- * @access protected
49
- * @var array $actions The actions registered with WordPress to fire when the plugin loads.
50
- */
51
- protected $actions;
52
-
53
- /**
54
- * The array of filters registered with WordPress.
55
- *
56
- * @since 1.0.0
57
- * @access protected
58
- * @var array $filters The filters registered with WordPress to fire when the plugin loads.
59
- */
60
- protected $filters;
61
-
62
- /**
63
- * @var Xcloner
64
- */
65
- private $xcloner_plugin;
66
-
67
- /**
68
- * @var Xcloner
69
- */
70
- private $xcloner_container;
71
-
72
-
73
- /**
74
- * Initialize the collections used to maintain the actions and filters.
75
- *
76
- * Xcloner_Loader constructor.
77
- * @param Xcloner $xcloner_container
78
- */
79
- public function __construct(Xcloner $xcloner_container)
80
- {
81
-
82
- $this->actions = array();
83
- $this->filters = array();
84
-
85
- $this->xcloner_container = $xcloner_container;
86
-
87
- }
88
-
89
- /**
90
- * Add a new action to the collection to be registered with WordPress.
91
- *
92
- * @since 1.0.0
93
- * @param string $hook The name of the WordPress action that is being registered.
94
- * @param object $component A reference to the instance of the object on which the action is defined.
95
- * @param string $callback The name of the function definition on the $component.
96
- * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
97
- * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1.
98
- */
99
- public function add_action($hook, $component, $callback, $priority = 10, $accepted_args = 1)
100
- {
101
- $this->actions = $this->add($this->actions, $hook, $component, $callback, $priority, $accepted_args);
102
- }
103
-
104
- /**
105
- * Add a new filter to the collection to be registered with WordPress.
106
- *
107
- * @since 1.0.0
108
- * @param string $hook The name of the WordPress filter that is being registered.
109
- * @param object $component A reference to the instance of the object on which the filter is defined.
110
- * @param string $callback The name of the function definition on the $component.
111
- * @param int $priority Optional. he priority at which the function should be fired. Default is 10.
112
- * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1
113
- */
114
- public function add_filter($hook, $component, $callback, $priority = 10, $accepted_args = 1)
115
- {
116
- $this->filters = $this->add($this->filters, $hook, $component, $callback, $priority, $accepted_args);
117
- }
118
-
119
- /**
120
- * A utility function that is used to register the actions and hooks into a single
121
- * collection.
122
- *
123
- * @since 1.0.0
124
- * @access private
125
- * @param array $hooks The collection of hooks that is being registered (that is, actions or filters).
126
- * @param string $hook The name of the WordPress filter that is being registered.
127
- * @param object $component A reference to the instance of the object on which the filter is defined.
128
- * @param string $callback The name of the function definition on the $component.
129
- * @param int $priority The priority at which the function should be fired.
130
- * @param int $accepted_args The number of arguments that should be passed to the $callback.
131
- * @return array The collection of actions and filters registered with WordPress.
132
- */
133
- private function add($hooks, $hook, $component, $callback, $priority, $accepted_args)
134
- {
135
-
136
- $hooks[] = array(
137
- 'hook' => $hook,
138
- 'component' => $component,
139
- 'callback' => $callback,
140
- 'priority' => $priority,
141
- 'accepted_args' => $accepted_args
142
- );
143
-
144
- return $hooks;
145
-
146
- }
147
-
148
- /**
149
- * Register the filters and actions with WordPress.
150
- *
151
- * @since 1.0.0
152
- */
153
- public function run()
154
- {
155
- foreach ($this->filters as $hook) {
156
- add_filter($hook['hook'], array($hook['component'], $hook['callback']), $hook['priority'],
157
- $hook['accepted_args']);
158
- }
159
-
160
- foreach ($this->actions as $hook) {
161
- add_action($hook['hook'], array($hook['component'], $hook['callback']), $hook['priority'],
162
- $hook['accepted_args']);
163
- }
164
-
165
- }
166
-
167
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-logger.php DELETED
@@ -1,138 +0,0 @@
1
- <?php
2
-
3
- use Monolog\Logger;
4
- use Monolog\Handler\StreamHandler;
5
- use Monolog\Handler\RotatingFileHandler;
6
-
7
- class Xcloner_Logger extends Logger
8
- {
9
- private $logger_path;
10
- private $max_logger_files = 7;
11
- private $main_logger_url;
12
-
13
- /**
14
- * Xcloner_Logger constructor.
15
- * @param Xcloner $xcloner_container
16
- * @param string $logger_name
17
- * @throws Exception
18
- */
19
- public function __construct(Xcloner $xcloner_container, $logger_name = "xcloner_logger")
20
- {
21
- if (!$xcloner_container->get_xcloner_settings()) {
22
- $xcloner_settings = new Xcloner_Settings($xcloner_container);
23
- } else {
24
- $xcloner_settings = $xcloner_container->get_xcloner_settings();
25
- }
26
-
27
- $hash = $xcloner_settings->get_hash();
28
- if ($hash == "-".$xcloner_settings->get_server_unique_hash(5)) {
29
- $hash = "";
30
- }
31
-
32
- $logger_path = $xcloner_settings->get_xcloner_store_path().DS.$xcloner_settings->get_logger_filename();
33
- $logger_path_tmp = "";
34
-
35
- if ($hash) {
36
- $logger_path_tmp = $xcloner_settings->get_xcloner_tmp_path().DS.$xcloner_settings->get_logger_filename(1);
37
- }
38
-
39
- $this->logger_path = $logger_path;
40
-
41
- if (!is_dir($xcloner_settings->get_xcloner_store_path()) or !is_writable($xcloner_settings->get_xcloner_store_path())) {
42
- $logger_path = 'php://stderr';
43
- $logger_path_tmp = "";
44
- }
45
-
46
- if (!$xcloner_settings->get_xcloner_option('xcloner_enable_log')) {
47
- $logger_path = 'php://stderr';
48
- $logger_path_tmp = "";
49
- }
50
-
51
- // create a log channel
52
- parent::__construct($logger_name);
53
-
54
- $debug_level = Logger::INFO;
55
-
56
- if (defined('WP_DEBUG') && WP_DEBUG) {
57
- $debug_level = Logger::DEBUG;
58
- }
59
-
60
- if ($logger_path) {
61
- if (!$xcloner_settings->get_xcloner_option('xcloner_enable_log')) {
62
- $stream = new StreamHandler($logger_path, $debug_level);
63
- } else {
64
- $stream = new RotatingFileHandler($logger_path, $this->max_logger_files, $debug_level);
65
- }
66
-
67
- $this->pushHandler($stream);
68
-
69
- $this->main_logger_url = $stream->getUrl();
70
- }
71
-
72
- if ($hash and $logger_path_tmp) {
73
- $this->pushHandler(new StreamHandler($logger_path_tmp, $debug_level));
74
- }
75
-
76
- //return $this;
77
- }
78
-
79
- /**
80
- * @return string|null
81
- */
82
- public function get_main_logger_url()
83
- {
84
- return $this->main_logger_url;
85
- }
86
-
87
- /**
88
- * @param int $totalLines
89
- * @return array|bool
90
- */
91
- public function getLastDebugLines($totalLines = 200)
92
- {
93
- $lines = array();
94
-
95
- if (!file_exists($this->main_logger_url) or !is_readable($this->main_logger_url)) {
96
- return false;
97
- }
98
-
99
- $fp = fopen($this->main_logger_url, 'r');
100
- fseek($fp, - 1, SEEK_END);
101
- $pos = ftell($fp);
102
- $lastLine = "";
103
-
104
- // Loop backword until we have our lines or we reach the start
105
- while ($pos > 0 && count($lines) < $totalLines) {
106
- $C = fgetc($fp);
107
- if ($C == "\n") {
108
- // skip empty lines
109
- if (trim($lastLine) != "") {
110
- $lines[] = $lastLine;
111
- }
112
- $lastLine = '';
113
- } else {
114
- $lastLine = $C.$lastLine;
115
- }
116
- fseek($fp, $pos--);
117
- }
118
-
119
- $lines = array_reverse($lines);
120
-
121
- return $lines;
122
- }
123
-
124
- /**
125
- * Info message logging
126
- *
127
- * @param [type] $msg
128
- * @param boolean $print
129
- * @return void
130
- */
131
- public function print_info($message, $context = array())
132
- {
133
- if (!WP_DEBUG) {
134
- echo sprintf("[%s] %s \n", date("Y-m-d H:i:s"), $message);
135
- }
136
- return parent::info($message, $context);
137
- }
138
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-remote-storage.php DELETED
@@ -1,858 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner - Backup and Restore backup plugin for Wordpress
4
- *
5
- * class-xcloner-remote-storage.php
6
- * @author Liuta Ovidiu <info@thinkovi.com>
7
- *
8
- * This program is free software; you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation; either version 2 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program; if not, write to the Free Software
20
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21
- * MA 02110-1301, USA.
22
- *
23
- * @link https://github.com/ovidiul/XCloner-Wordpress
24
- *
25
- * @modified 7/25/18 2:15 PM
26
- *
27
- */
28
-
29
- use League\Flysystem\Config;
30
- use League\Flysystem\Filesystem;
31
-
32
- use League\Flysystem\Adapter\Ftp as Adapter;
33
-
34
- use League\Flysystem\Sftp\SftpAdapter;
35
-
36
- use Srmklive\Dropbox\Client\DropboxClient;
37
- use Srmklive\Dropbox\Adapter\DropboxAdapter;
38
-
39
- use League\Flysystem\AzureBlobStorage\AzureBlobStorageAdapter;
40
- use MicrosoftAzure\Storage\Blob\BlobRestProxy;
41
-
42
- use Aws\S3\S3Client;
43
- use League\Flysystem\AwsS3v3\AwsS3Adapter;
44
-
45
- use Mhetreramesh\Flysystem\BackblazeAdapter;
46
- use BackblazeB2\Client as B2Client;
47
-
48
- use Sabre\DAV\Client as SabreClient;
49
- use League\Flysystem\WebDAV\WebDAVAdapter;
50
-
51
- /**
52
- * Class Xcloner_Remote_Storage
53
- */
54
- class Xcloner_Remote_Storage
55
- {
56
- private $gdrive_app_name = "XCloner Backup and Restore";
57
-
58
- private $storage_fields = array(
59
- "option_prefix" => "xcloner_",
60
- "ftp" => array(
61
- "text" => "FTP",
62
- "ftp_enable" => "int",
63
- "ftp_hostname" => "string",
64
- "ftp_port" => "int",
65
- "ftp_username" => "string",
66
- "ftp_password" => "raw",
67
- "ftp_path" => "path",
68
- "ftp_transfer_mode" => "int",
69
- "ftp_ssl_mode" => "int",
70
- "ftp_timeout" => "int",
71
- "ftp_cleanup_retention_limit_days" => "float",
72
- "ftp_cleanup_exclude_days" => "string",
73
- "ftp_cleanup_retention_limit_archives" => "int",
74
- "ftp_cleanup_capacity_limit" => "int"
75
- ),
76
- "sftp" => array(
77
- "text" => "SFTP",
78
- "sftp_enable" => "int",
79
- "sftp_hostname" => "string",
80
- "sftp_port" => "int",
81
- "sftp_username" => "string",
82
- "sftp_password" => "raw",
83
- "sftp_path" => "path",
84
- "sftp_private_key" => "raw",
85
- "sftp_timeout" => "int",
86
- "sftp_cleanup_retention_limit_days" => "float",
87
- "sftp_cleanup_exclude_days" => "string",
88
- "sftp_cleanup_retention_limit_archives" => "int",
89
- "sftp_cleanup_capacity_limit" => "int"
90
- ),
91
- "aws" => array(
92
- "text" => "S3",
93
- "aws_enable" => "int",
94
- "aws_key" => "string",
95
- "aws_secret" => "raw",
96
- "aws_endpoint" => "string",
97
- "aws_region" => "string",
98
- "aws_bucket_name" => "string",
99
- "aws_prefix" => "string",
100
- "aws_cleanup_retention_limit_days" => "float",
101
- "aws_cleanup_exclude_days" => "string",
102
- "aws_cleanup_retention_limit_archives" => "int",
103
- "aws_cleanup_capacity_limit" => "int"
104
- ),
105
- "dropbox" => array(
106
- "text" => "Dropbox",
107
- "dropbox_enable" => "int",
108
- "dropbox_access_token" => "string",
109
- "dropbox_app_secret" => "raw",
110
- "dropbox_prefix" => "string",
111
- "dropbox_cleanup_retention_limit_days" => "float",
112
- "dropbox_cleanup_exclude_days" => "string",
113
- "dropbox_cleanup_retention_limit_archives" => "int",
114
- "dropbox_cleanup_capacity_limit" => "int"
115
- ),
116
- "azure" => array(
117
- "text" => "Azure BLOB",
118
- "azure_enable" => "int",
119
- "azure_account_name" => "string",
120
- "azure_api_key" => "raw",
121
- "azure_container" => "string",
122
- "azure_cleanup_retention_limit_days" => "float",
123
- "azure_cleanup_exclude_days" => "string",
124
- "azure_cleanup_retention_limit_archives" => "int",
125
- "azure_cleanup_capacity_limit" => "int"
126
- ),
127
- "backblaze" => array(
128
- "text" => "Backblaze",
129
- "backblaze_enable" => "int",
130
- "backblaze_account_id" => "string",
131
- "backblaze_application_key" => "raw",
132
- "backblaze_bucket_name" => "string",
133
- "backblaze_cleanup_retention_limit_days" => "float",
134
- "backblaze_cleanup_exclude_days" => "string",
135
- "backblaze_cleanup_retention_limit_archives" => "int",
136
- "backblaze_cleanup_capacity_limit" => "int"
137
- ),
138
-
139
- "webdav" => array(
140
- "text" => "WebDAV",
141
- "webdav_enable" => "int",
142
- "webdav_url" => "string",
143
- "webdav_username" => "string",
144
- "webdav_password" => "raw",
145
- "webdav_target_folder" => "string",
146
- "webdav_cleanup_retention_limit_days" => "float",
147
- "webdav_cleanup_exclude_days" => "string",
148
- "webdav_cleanup_retention_limit_archives" => "int",
149
- "webdav_cleanup_capacity_limit" => "int"
150
-
151
- ),
152
-
153
- "gdrive" => array(
154
- "text" => "Google Drive",
155
- "gdrive_enable" => "int",
156
- "gdrive_access_code" => "string",
157
- "gdrive_client_id" => "string",
158
- "gdrive_client_secret" => "raw",
159
- "gdrive_target_folder" => "string",
160
- "gdrive_cleanup_retention_limit_days" => "float",
161
- "gdrive_empty_trash" => "int",
162
- "gdrive_cleanup_exclude_days" => "string",
163
- "gdrive_cleanup_retention_limit_archives" => "int",
164
- "gdrive_cleanup_capacity_limit" => "int"
165
- ),
166
- );
167
-
168
- private $aws_regions = array(
169
- 'us-east-1' => 'US East (N. Virginia)',
170
- 'us-east-2' => 'US East (Ohio)',
171
- 'us-west-1' => 'US West (N. California)',
172
- 'us-west-2' => 'US West (Oregon)',
173
- 'ca-central-1' => 'Canada (Central)',
174
- 'eu-west-1' => 'EU (Ireland)',
175
- 'eu-central-1' => 'EU (Frankfurt)',
176
- 'eu-west-2' => 'EU (London)',
177
- 'ap-northeast-1' => 'Asia Pacific (Tokyo)',
178
- 'ap-northeast-2' => 'Asia Pacific (Seoul)',
179
- 'ap-southeast-1' => 'Asia Pacific (Singapore)',
180
- 'ap-southeast-2' => 'Asia Pacific (Sydney)',
181
- 'ap-south-1' => 'Asia Pacific (Mumbai)',
182
- 'sa-east-1' => 'South America (São Paulo)'
183
- );
184
-
185
- private $xcloner_sanitization;
186
- private $xcloner_file_system;
187
- private $xcloner_settings;
188
- private $logger;
189
- private $xcloner;
190
-
191
- /**
192
- * Xcloner_Remote_Storage constructor.
193
- * @param Xcloner $xcloner_container
194
- */
195
- public function __construct(Xcloner $xcloner_container)
196
- {
197
- $this->xcloner_sanitization = $xcloner_container->get_xcloner_sanitization();
198
- $this->xcloner_file_system = $xcloner_container->get_xcloner_filesystem();
199
- $this->xcloner_settings = $xcloner_container->get_xcloner_settings();
200
- $this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_remote_storage");
201
- $this->xcloner = $xcloner_container;
202
-
203
- foreach ($this->storage_fields as $main_key => $array) {
204
- if (is_array($array)) {
205
- foreach ($array as $key => $type) {
206
- if ($type == "raw") {
207
- add_filter(
208
- "pre_update_option_" . $this->storage_fields['option_prefix'] . $key,
209
- function ($value) {
210
- return $this->simple_crypt($value, 'e');
211
- },
212
- 10,
213
- 1
214
- );
215
-
216
- add_filter("option_" . $this->storage_fields['option_prefix'] . $key, function ($value) {
217
- return $this->simple_crypt($value, 'd');
218
- }, 10, 1);
219
- }
220
- }
221
- }
222
- }
223
- }
224
-
225
- /**
226
- * Encrypts and Decrypt a string based on openssl lib
227
- *
228
- * @param $string
229
- * @param string $action
230
- * @return string
231
- */
232
- private function simple_crypt($string, $action = 'e')
233
- {
234
- // you may change these values to your own
235
- $secret_key = NONCE_KEY;
236
- $secret_iv = NONCE_SALT;
237
-
238
- if (!$string) {
239
- //we do no encryption for empty data
240
- return $string;
241
- }
242
-
243
- $output = $string;
244
- $encrypt_method = "AES-256-CBC";
245
- $key = hash('sha256', $secret_key);
246
- $iv = substr(hash('sha256', $secret_iv), 0, 16);
247
-
248
- if ($action == 'e' && function_exists('openssl_encrypt')) {
249
- $output = base64_encode(openssl_encrypt($string, $encrypt_method, $key, 0, $iv));
250
- } else {
251
- if ($action == 'd' && function_exists('openssl_decrypt') && base64_decode($string)) {
252
- $decrypt = openssl_decrypt(base64_decode($string), $encrypt_method, $key, 0, $iv);
253
- if ($decrypt) {
254
- //we check if decrypt was succesful
255
- $output = $decrypt;
256
- }
257
- }
258
- }
259
-
260
- return $output;
261
- }
262
-
263
- private function get_xcloner_container()
264
- {
265
- return $this->xcloner;
266
- }
267
-
268
- public function get_available_storages()
269
- {
270
- $return = array();
271
- foreach ($this->storage_fields as $storage => $data) {
272
- $check_field = $this->storage_fields["option_prefix"] . $storage . "_enable";
273
- if ($this->xcloner_settings->get_xcloner_option($check_field)) {
274
- $return[$storage] = $data['text'];
275
- }
276
- }
277
-
278
- return $return;
279
- }
280
-
281
- public function save($action = "ftp")
282
- {
283
- if (!$action) {
284
- return false;
285
- }
286
-
287
- $storage = $this->xcloner_sanitization->sanitize_input_as_string($action);
288
- $this->logger->debug(sprintf("Saving the remote storage %s options", strtoupper($action)));
289
-
290
- if (is_array($this->storage_fields[$storage])) {
291
- foreach ($this->storage_fields[$storage] as $field => $validation) {
292
- $check_field = $this->storage_fields["option_prefix"] . $field;
293
- $sanitize_method = "sanitize_input_as_" . $validation;
294
-
295
- //we do not save empty encrypted credentials
296
- if ($validation == "raw" && str_repeat('*', strlen($_POST[$check_field])) == $_POST[$check_field] && $_POST[$check_field]) {
297
- continue;
298
- }
299
-
300
- if (!isset($_POST[$check_field])) {
301
- $_POST[$check_field] = 0;
302
- }
303
-
304
- if (!method_exists($this->xcloner_sanitization, $sanitize_method)) {
305
- $sanitize_method = "sanitize_input_as_string";
306
- }
307
-
308
- $sanitized_value = $this->xcloner_sanitization->$sanitize_method(stripslashes($_POST[$check_field]));
309
- update_option($check_field, $sanitized_value);
310
- }
311
-
312
- $this->xcloner->trigger_message(
313
- __("%s storage settings saved.", 'xcloner-backup-and-restore'),
314
- "success",
315
- $this->storage_fields[$action]['text']
316
- );
317
- }
318
- }
319
-
320
- public function check($action = "ftp")
321
- {
322
- try {
323
- $this->verify_filesystem($action);
324
- $this->xcloner->trigger_message(
325
- __("%s connection is valid.", 'xcloner-backup-and-restore'),
326
- "success",
327
- $this->storage_fields[$action]['text']
328
- );
329
- $this->logger->debug(sprintf("Connection to remote storage %s is valid", strtoupper($action)));
330
- } catch (Exception $e) {
331
- $this->xcloner->trigger_message(
332
- "%s connection error: " . $e->getMessage(),
333
- "error",
334
- $this->storage_fields[$action]['text']
335
- );
336
- }
337
- }
338
-
339
- /**
340
- * @param string $storage_type
341
- */
342
- public function verify_filesystem($storage_type)
343
- {
344
- $method = "get_" . $storage_type . "_filesystem";
345
-
346
- $this->logger->info(sprintf(
347
- "Checking validity of the remote storage %s filesystem",
348
- strtoupper($storage_type)
349
- ));
350
-
351
- if (!method_exists($this, $method)) {
352
- return false;
353
- }
354
-
355
- list($adapter, $filesystem) = $this->$method();
356
-
357
- $test_file = substr(".xcloner_" . md5(time()), 0, 15);
358
-
359
- if ($storage_type == "gdrive") {
360
- if (!is_array($filesystem->listContents())) {
361
- throw new Exception(__("Could not read data", 'xcloner-backup-and-restore'));
362
- }
363
- $this->logger->debug(sprintf("I can list data from remote storage %s", strtoupper($storage_type)));
364
-
365
- return true;
366
- }
367
-
368
- //testing write access
369
- if (!$filesystem->write($test_file, "data")) {
370
- throw new Exception(__("Could not write data", 'xcloner-backup-and-restore'));
371
- }
372
- $this->logger->debug(sprintf("I can write data to remote storage %s", strtoupper($storage_type)));
373
-
374
- //testing read access
375
- if (!$filesystem->has($test_file)) {
376
- throw new Exception(__("Could not read data", 'xcloner-backup-and-restore'));
377
- }
378
- $this->logger->debug(sprintf("I can read data to remote storage %s", strtoupper($storage_type)));
379
-
380
- //delete test file
381
- if (!$filesystem->delete($test_file)) {
382
- throw new Exception(__("Could not delete data", 'xcloner-backup-and-restore'));
383
- }
384
- $this->logger->debug(sprintf("I can delete data to remote storage %s", strtoupper($storage_type)));
385
-
386
- return true;
387
- }
388
-
389
- public function upload_backup_to_storage($file, $storage, $delete_local_copy_after_transfer = 0)
390
- {
391
- if (!$this->xcloner_file_system->get_storage_filesystem()->has($file)) {
392
- $this->logger->info(sprintf("File not found %s in local storage", $file));
393
-
394
- return false;
395
- }
396
-
397
- $method = "get_" . $storage . "_filesystem";
398
-
399
- if (!method_exists($this, $method)) {
400
- return false;
401
- }
402
-
403
- list($remote_storage_adapter, $remote_storage_filesystem) = $this->$method();
404
-
405
- //doing remote storage cleaning here
406
- $this->clean_remote_storage($storage, $remote_storage_filesystem);
407
-
408
- $this->logger->info(
409
- sprintf("Transferring backup %s to remote storage %s", $file, strtoupper($storage)),
410
- array("")
411
- );
412
-
413
- /*if(!$this->xcloner_file_system->get_storage_filesystem()->has($file))
414
- {
415
- $this->logger->info(sprintf("File not found %s in local storage", $file));
416
- return false;
417
- }*/
418
-
419
- $backup_file_stream = $this->xcloner_file_system->get_storage_filesystem()->readStream($file);
420
-
421
- if (!$remote_storage_filesystem->writeStream($file, $backup_file_stream)) {
422
- $this->logger->info(sprintf("Could not transfer file %s", $file));
423
-
424
- return false;
425
- }
426
-
427
- if ($this->xcloner_file_system->is_multipart($file)) {
428
- $parts = $this->xcloner_file_system->get_multipart_files($file);
429
- if (is_array($parts)) {
430
- foreach ($parts as $part_file) {
431
- $this->logger->info(sprintf(
432
- "Transferring backup %s to remote storage %s",
433
- $part_file,
434
- strtoupper($storage)
435
- ), array(""));
436
-
437
- $backup_file_stream = $this->xcloner_file_system->get_storage_filesystem()->readStream($part_file);
438
- if (!$remote_storage_filesystem->writeStream($part_file, $backup_file_stream)) {
439
- return false;
440
- }
441
- }
442
- }
443
- }
444
-
445
- $this->logger->info(sprintf("Upload done, disconnecting from remote storage %s", strtoupper($storage)));
446
-
447
- //CHECK IF WE SHOULD DELETE BACKUP AFTER REMOTE TRANSFER IS DONE
448
- //if ( $this->xcloner_settings->get_xcloner_option('xcloner_cleanup_delete_after_remote_transfer')) {
449
- if ($delete_local_copy_after_transfer) {
450
- $this->logger->info(sprintf("Deleting %s from local storage matching rule xcloner_cleanup_delete_after_remote_transfer", $file));
451
- $this->xcloner_file_system->delete_backup_by_name($file);
452
- }
453
-
454
- return true;
455
- }
456
-
457
- public function copy_backup_remote_to_local($file, $storage)
458
- {
459
- $method = "get_" . $storage . "_filesystem";
460
-
461
- $target_filename = $file;
462
-
463
- if (!method_exists($this, $method)) {
464
- return false;
465
- }
466
-
467
- list($remote_storage_adapter, $remote_storage_filesystem) = $this->$method();
468
-
469
- if (!$remote_storage_filesystem->has($file)) {
470
- $this->logger->info(sprintf("File not found %s in remote storage %s", $file, strtoupper($storage)));
471
-
472
- return false;
473
- }
474
-
475
- if ($storage == "gdrive") {
476
- $metadata = $remote_storage_filesystem->getMetadata($file);
477
- $target_filename = $metadata['filename'] . "." . $metadata['extension'];
478
- }
479
-
480
- $this->logger->info(sprintf(
481
- "Transferring backup %s to local storage from %s storage",
482
- $file,
483
- strtoupper($storage)
484
- ), array(""));
485
-
486
- $backup_file_stream = $remote_storage_filesystem->readStream($file);
487
-
488
- if (!$this->xcloner_file_system->get_storage_filesystem()->writeStream($target_filename, $backup_file_stream)) {
489
- $this->logger->info(sprintf("Could not transfer file %s", $file));
490
-
491
- return false;
492
- }
493
-
494
- if ($this->xcloner_file_system->is_multipart($target_filename)) {
495
- $parts = $this->xcloner_file_system->get_multipart_files($file, $storage);
496
- if (is_array($parts)) {
497
- foreach ($parts as $part_file) {
498
- $this->logger->info(sprintf(
499
- "Transferring backup %s to local storage from %s storage",
500
- $part_file,
501
- strtoupper($storage)
502
- ), array(""));
503
-
504
- $backup_file_stream = $remote_storage_filesystem->readStream($part_file);
505
- if (!$this->xcloner_file_system->get_storage_filesystem()->writeStream(
506
- $part_file,
507
- $backup_file_stream
508
- )) {
509
- return false;
510
- }
511
- }
512
- }
513
- }
514
-
515
- $this->logger->info(sprintf("Upload done, disconnecting from remote storage %s", strtoupper($storage)));
516
-
517
- return true;
518
- }
519
-
520
- public function clean_remote_storage($storage, $remote_storage_filesystem)
521
- {
522
- return $this->xcloner_file_system->backup_storage_cleanup($storage, $remote_storage_filesystem);
523
- }
524
-
525
- public function get_azure_filesystem()
526
- {
527
- $this->logger->info(sprintf("Creating the AZURE BLOB remote storage connection"), array(""));
528
-
529
- if (version_compare(phpversion(), '5.6.0', '<')) {
530
- throw new Exception("AZURE BLOB requires PHP 5.6 to be installed!");
531
- }
532
-
533
- if (!class_exists('XmlWriter')) {
534
- throw new Exception("AZURE BLOB requires libxml PHP module to be installed with XmlWriter class enabled!");
535
- }
536
-
537
- $endpoint = sprintf(
538
- 'DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s',
539
- $this->xcloner_settings->get_xcloner_option("xcloner_azure_account_name"),
540
- $this->xcloner_settings->get_xcloner_option("xcloner_azure_api_key")
541
- );
542
-
543
- $blobRestProxy = BlobRestProxy::createBlobService($endpoint);
544
-
545
- $adapter = new AzureBlobStorageAdapter($blobRestProxy, $this->xcloner_settings->get_xcloner_option("xcloner_azure_container"));
546
-
547
- $filesystem = new Filesystem($adapter, new Config([
548
- 'disable_asserts' => true,
549
- ]));
550
-
551
- return array($adapter, $filesystem);
552
- }
553
-
554
- public function get_dropbox_filesystem()
555
- {
556
- $this->logger->info(sprintf("Creating the DROPBOX remote storage connection"), array(""));
557
-
558
- if (version_compare(phpversion(), '5.6.0', '<')) {
559
- throw new Exception("DROPBOX requires PHP 5.6 to be installed!");
560
- }
561
-
562
- $client = new DropboxClient($this->xcloner_settings->get_xcloner_option("xcloner_dropbox_access_token"));
563
- $adapter = new DropboxAdapter($client, $this->xcloner_settings->get_xcloner_option("xcloner_dropbox_prefix"));
564
-
565
- $filesystem = new Filesystem($adapter, new Config([
566
- 'disable_asserts' => true,
567
- ]));
568
-
569
- return array($adapter, $filesystem);
570
- }
571
-
572
- public function get_aws_filesystem()
573
- {
574
- $this->logger->info(sprintf("Creating the S3 remote storage connection"), array(""));
575
-
576
- if (version_compare(phpversion(), '5.6.0', '<')) {
577
- throw new Exception("S3 class requires PHP 5.6 to be installed!");
578
- }
579
-
580
- if (!class_exists('XmlWriter')) {
581
- throw new Exception("AZURE BLOB requires libxml PHP module to be installed with XmlWriter class enabled!");
582
- }
583
-
584
-
585
- $credentials = array(
586
- 'credentials' => array(
587
- 'key' => $this->xcloner_settings->get_xcloner_option("xcloner_aws_key"),
588
- 'secret' => $this->xcloner_settings->get_xcloner_option("xcloner_aws_secret")
589
- ),
590
- 'region' => $this->xcloner_settings->get_xcloner_option("xcloner_aws_region"),
591
- 'version' => 'latest',
592
- );
593
-
594
- if ($this->xcloner_settings->get_xcloner_option('xcloner_aws_endpoint') != "" && !$this->xcloner_settings->get_xcloner_option("xcloner_aws_region")) {
595
- $credentials['endpoint'] = $this->xcloner_settings->get_xcloner_option('xcloner_aws_endpoint');
596
- #$credentials['use_path_style_endpoint'] = true;
597
- #$credentials['bucket_endpoint'] = false;
598
- }
599
-
600
- $client = new S3Client($credentials);
601
-
602
- $adapter = new AwsS3Adapter($client, $this->xcloner_settings->get_xcloner_option("xcloner_aws_bucket_name"), $this->xcloner_settings->get_xcloner_option("xcloner_aws_prefix"));
603
- $filesystem = new Filesystem($adapter, new Config([
604
- 'disable_asserts' => true,
605
- ]));
606
-
607
- return array($adapter, $filesystem);
608
- }
609
-
610
- public function get_backblaze_filesystem()
611
- {
612
- $this->logger->info(sprintf("Creating the BACKBLAZE remote storage connection"), array(""));
613
-
614
- if (version_compare(phpversion(), '5.6.0', '<')) {
615
- throw new Exception("BACKBLAZE API requires PHP 5.6 to be installed!");
616
- }
617
-
618
-
619
- $client = new B2Client(
620
- $this->xcloner_settings->get_xcloner_option("xcloner_backblaze_account_id"),
621
- $this->xcloner_settings->get_xcloner_option("xcloner_backblaze_application_key")
622
- );
623
- $adapter = new BackblazeAdapter($client, $this->xcloner_settings->get_xcloner_option("xcloner_backblaze_bucket_name"));
624
-
625
- $filesystem = new Filesystem($adapter, new Config([
626
- 'disable_asserts' => true,
627
- ]));
628
-
629
- return array($adapter, $filesystem);
630
- }
631
-
632
- public function get_webdav_filesystem()
633
- {
634
- $this->logger->info(sprintf("Creating the WEBDAV remote storage connection"), array(""));
635
-
636
- if (version_compare(phpversion(), '5.6.0', '<')) {
637
- throw new Exception("WEBDAV API requires PHP 5.6 to be installed!");
638
- }
639
-
640
- $settings = array(
641
- 'baseUri' => $this->xcloner_settings->get_xcloner_option("xcloner_webdav_url"),
642
- 'userName' => $this->xcloner_settings->get_xcloner_option("xcloner_webdav_username"),
643
- 'password' => $this->xcloner_settings->get_xcloner_option("xcloner_webdav_password"),
644
- //'proxy' => 'locahost:8888',
645
- );
646
-
647
- $client = new SabreClient($settings);
648
- $adapter = new WebDAVAdapter($client, $this->xcloner_settings->get_xcloner_option("xcloner_webdav_target_folder"));
649
- $filesystem = new Filesystem($adapter, new Config([
650
- 'disable_asserts' => true,
651
- ]));
652
-
653
- return array($adapter, $filesystem);
654
- }
655
-
656
-
657
- public function gdrive_construct()
658
- {
659
-
660
- //if((function_exists("is_plugin_active") && !is_plugin_active("xcloner-google-drive/xcloner-google-drive.php")) || !file_exists(__DIR__ . "/../../xcloner-google-drive/vendor/autoload.php"))
661
- if (!class_exists('Google_Client')) {
662
- return false;
663
- }
664
-
665
- //require_once(__DIR__ . "/../../xcloner-google-drive/vendor/autoload.php");
666
-
667
- $client = new \Google_Client();
668
- $client->setApplicationName($this->gdrive_app_name);
669
- $client->setClientId($this->xcloner_settings->get_xcloner_option("xcloner_gdrive_client_id"));
670
- $client->setClientSecret($this->xcloner_settings->get_xcloner_option("xcloner_gdrive_client_secret"));
671
-
672
- //$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']."?page=xcloner_remote_storage_page&action=set_gdrive_code";
673
- $redirect_uri = "urn:ietf:wg:oauth:2.0:oob";
674
-
675
- $client->setRedirectUri($redirect_uri); //urn:ietf:wg:oauth:2.0:oob
676
- $client->addScope("https://www.googleapis.com/auth/drive");
677
- $client->setAccessType('offline');
678
-
679
- return $client;
680
- }
681
-
682
- public function get_gdrive_auth_url()
683
- {
684
- $client = $this->gdrive_construct();
685
-
686
- if (!$client) {
687
- return false;
688
- }
689
-
690
- return $authUrl = $client->createAuthUrl();
691
- }
692
-
693
- public function set_access_token($code)
694
- {
695
- $client = $this->gdrive_construct();
696
-
697
- if (!$client) {
698
- $error_msg = "Could not initialize the Google Drive Class, please check that the xcloner-google-drive plugin is enabled...";
699
- $this->logger->error($error_msg);
700
-
701
- return false;
702
- }
703
-
704
- $token = $client->fetchAccessTokenWithAuthCode($code);
705
- $client->setAccessToken($token);
706
-
707
- update_option("xcloner_gdrive_access_token", $token['access_token']);
708
- update_option("xcloner_gdrive_refresh_token", $token['refresh_token']);
709
-
710
- $redirect_url = ('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?page=xcloner_remote_storage_page#gdrive"); ?>
711
- <script>
712
- window.location = '<?php echo $redirect_url?>';
713
- </script>
714
- <?php
715
- }
716
-
717
- /*
718
- * php composer.phar remove nao-pon/flysystem-google-drive
719
- *
720
- */
721
- public function get_gdrive_filesystem()
722
- {
723
- if (version_compare(phpversion(), '5.6.0', '<')) {
724
- throw new Exception("Google Drive API requires PHP 5.6 to be installed!");
725
- }
726
-
727
- $this->logger->info(sprintf("Creating the Google Drive remote storage connection"), array(""));
728
-
729
- $client = $this->gdrive_construct();
730
-
731
- if (!$client) {
732
- $error_msg = "Could not initialize the Google Drive Class, please check that the xcloner-google-drive plugin is enabled...";
733
- $this->logger->error($error_msg);
734
- throw new Exception($error_msg);
735
- }
736
-
737
- $client->refreshToken($this->xcloner_settings->get_xcloner_option("xcloner_gdrive_refresh_token"));
738
-
739
- $service = new \Google_Service_Drive($client);
740
-
741
- if ($this->xcloner_settings->get_xcloner_option("xcloner_gdrive_empty_trash", 0)) {
742
- $this->logger->info(sprintf("Doing a Google Drive emptyTrash call"), array(""));
743
- $service->files->emptyTrash();
744
- }
745
-
746
- $parent = 'root';
747
- $dir = basename($this->xcloner_settings->get_xcloner_option("xcloner_gdrive_target_folder"));
748
-
749
- $folderID = $this->xcloner_settings->get_xcloner_option("xcloner_gdrive_target_folder");
750
-
751
- $tmp = parse_url($folderID);
752
-
753
- if (isset($tmp['query'])) {
754
- $folderID = str_replace("id=", "", $tmp['query']);
755
- }
756
-
757
- if (stristr($folderID, "/")) {
758
- $query = sprintf(
759
- 'mimeType = \'application/vnd.google-apps.folder\' and \'%s\' in parents and name contains \'%s\'',
760
- $parent,
761
- $dir
762
- );
763
- $response = $service->files->listFiles([
764
- 'pageSize' => 1,
765
- 'q' => $query
766
- ]);
767
-
768
- if (sizeof($response)) {
769
- foreach ($response as $obj) {
770
- $folderID = $obj->getId();
771
- }
772
- } else {
773
- $this->xcloner->trigger_message(sprintf(__(
774
- "Could not find folder ID by name %s",
775
- 'xcloner-backup-and-restore'
776
- ), $folderID), "error");
777
- }
778
- }
779
-
780
- $this->logger->info(sprintf("Using target folder with ID %s on the remote storage", $folderID));
781
-
782
- if (class_exists('XCloner_Google_Drive_Adapter')) {
783
- $adapter = new XCloner_Google_Drive_Adapter($service, $folderID);
784
- } else {
785
- $adapter = new \Hypweb\Flysystem\GoogleDrive\GoogleDriveAdapter($service, $folderID);
786
- }
787
-
788
- $filesystem = new \League\Flysystem\Filesystem($adapter, new Config([
789
- 'disable_asserts' => true,
790
- ]));
791
-
792
-
793
- return array($adapter, $filesystem);
794
- }
795
-
796
- public function get_ftp_filesystem()
797
- {
798
- $this->logger->info(sprintf("Creating the FTP remote storage connection"), array(""));
799
-
800
- $adapter = new Adapter([
801
- 'host' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_hostname"),
802
- 'username' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_username"),
803
- 'password' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_password"),
804
-
805
- /** optional config settings */
806
- 'port' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_port", 21),
807
- 'root' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_path"),
808
- 'passive' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_transfer_mode"),
809
- 'ssl' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_ssl_mode"),
810
- 'timeout' => $this->xcloner_settings->get_xcloner_option("xcloner_ftp_timeout", 30),
811
- ]);
812
-
813
- $adapter->connect();
814
-
815
- $filesystem = new Filesystem($adapter, new Config([
816
- 'disable_asserts' => true,
817
- ]));
818
-
819
- return array($adapter, $filesystem);
820
- }
821
-
822
- public function get_sftp_filesystem()
823
- {
824
- $this->logger->info(sprintf("Creating the SFTP remote storage connection"), array(""));
825
-
826
- $adapter = new SftpAdapter([
827
- 'host' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_hostname"),
828
- 'username' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_username"),
829
- 'password' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_password"),
830
-
831
- /** optional config settings */
832
- 'port' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_port", 22),
833
- 'root' => ($this->xcloner_settings->get_xcloner_option("xcloner_sftp_path")?$this->xcloner_settings->get_xcloner_option("xcloner_sftp_path"):'./'),
834
- 'privateKey' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_private_key"),
835
- 'timeout' => $this->xcloner_settings->get_xcloner_option("xcloner_sftp_timeout", 30),
836
- 'directoryPerm' => 0755
837
- ]);
838
-
839
- $filesystem = new Filesystem($adapter, new Config([
840
- 'disable_asserts' => true,
841
- ]));
842
-
843
- return array($adapter, $filesystem);
844
- }
845
-
846
- public function change_storage_status($field, $value)
847
- {
848
- $field = $this->xcloner_sanitization->sanitize_input_as_string($field);
849
- $value = $this->xcloner_sanitization->sanitize_input_as_int($value);
850
-
851
- return update_option($field, $value);
852
- }
853
-
854
- public function get_aws_regions()
855
- {
856
- return $this->aws_regions;
857
- }
858
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-requirements.php DELETED
@@ -1,169 +0,0 @@
1
- <?php
2
-
3
- class Xcloner_Requirements {
4
-
5
- var $min_php_version = "5.6.0";
6
- var $safe_mode = "Off";
7
-
8
- private $xcloner_settings;
9
- private $xcloner_container;
10
-
11
- public function __construct(Xcloner $xcloner_container) {
12
- $this->xcloner_container = $xcloner_container;
13
- $this->xcloner_settings = $xcloner_container->get_xcloner_settings();
14
- }
15
-
16
- private function get_xcloner_container() {
17
- return $this->xcloner_container;
18
- }
19
-
20
- public function check_backup_ready_status() {
21
- if (!$this->check_min_php_version(1)) {
22
- return false;
23
- }
24
-
25
- if (!$this->check_safe_mode(1)) {
26
- return false;
27
- }
28
-
29
- if (!$this->check_xcloner_start_path(1)) {
30
- return false;
31
- }
32
-
33
- if (!$this->check_xcloner_store_path(1)) {
34
- return false;
35
- }
36
-
37
- if (!$this->check_xcloner_tmp_path(1)) {
38
- return false;
39
- }
40
-
41
- return true;
42
- }
43
-
44
- public function get_constant($var) {
45
- return $this->$var;
46
- }
47
-
48
- public function check_min_php_version($return_bool = 0) {
49
-
50
- if ($return_bool == 1) {
51
- if (version_compare(phpversion(), $this->min_php_version, '<')) {
52
- return false;
53
- } else {
54
- return true;
55
- }
56
- }
57
-
58
- return phpversion();
59
- }
60
-
61
- public function check_safe_mode($return_bool = 0) {
62
- /*no longer needed for PHP 7*/
63
- $safe_mode = "Off";
64
-
65
- /*if($return_bool)
66
- {
67
- if( ini_get('safe_mode') )
68
- return false;
69
- else
70
- return true;
71
- }
72
-
73
- if( ini_get('safe_mode') )
74
- $safe_mode = "On";
75
- * */
76
-
77
- return $safe_mode;
78
- }
79
-
80
- public function check_xcloner_start_path($return_bool = 0) {
81
- $path = $this->xcloner_settings->get_xcloner_start_path();
82
-
83
- if ($return_bool) {
84
- if (!file_exists($path)) {
85
- return false;
86
- }
87
-
88
- return is_readable($path);
89
- }
90
-
91
- return $path;
92
- }
93
-
94
- public function check_xcloner_tmp_path($return_bool = 0) {
95
- $path = $this->xcloner_settings->get_xcloner_tmp_path();
96
-
97
- if ($return_bool) {
98
- if (!file_exists($path)) {
99
- return false;
100
- }
101
-
102
- if (!is_writeable($path)) {
103
- @chmod($path, 0777);
104
- }
105
-
106
- return is_writeable($path);
107
- }
108
-
109
- return $path;
110
- }
111
-
112
- public function check_xcloner_store_path($return_bool = 0) {
113
- $path = $this->xcloner_settings->get_xcloner_store_path();
114
-
115
- if ($return_bool) {
116
- if (!file_exists($path)) {
117
- return false;
118
- }
119
-
120
- if (!is_writeable($path)) {
121
- @chmod($path, 0777);
122
- }
123
-
124
- return is_writeable($path);
125
- }
126
-
127
- return $path;
128
- }
129
-
130
- public function get_max_execution_time() {
131
- return ini_get('max_execution_time');
132
- }
133
-
134
- public function get_memory_limit() {
135
- return ini_get('memory_limit');
136
- }
137
-
138
- public function get_open_basedir() {
139
- $open_basedir = ini_get('open_basedir');
140
-
141
- if (!$open_basedir) {
142
- $open_basedir = "none";
143
- }
144
-
145
- return $open_basedir;
146
- }
147
-
148
- public function get_free_disk_space() {
149
- return $this->file_format_size(disk_free_space($this->xcloner_settings->get_xcloner_store_path()));
150
- }
151
-
152
- public function file_format_size($bytes, $decimals = 2) {
153
- $unit_list = array('B', 'KB', 'MB', 'GB', 'PB');
154
-
155
- if ($bytes == 0) {
156
- return $bytes.' '.$unit_list[0];
157
- }
158
-
159
- $unit_count = count($unit_list);
160
- for ($i = $unit_count - 1; $i >= 0; $i--) {
161
- $power = $i * 10;
162
- if (($bytes >> $power) >= 1) {
163
- return round($bytes / (1 << $power), $decimals).' '.$unit_list[$i];
164
- }
165
- }
166
- }
167
- }
168
-
169
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-sanitization.php DELETED
@@ -1,119 +0,0 @@
1
- <?php
2
-
3
- use League\Flysystem\Util;
4
-
5
- class Xcloner_Sanitization
6
- {
7
-
8
- /**
9
- * Construct method
10
- */
11
- public function __construct()
12
- {
13
- }
14
-
15
- /**
16
- * Sanitize input as INT
17
- *
18
- * @param [type] $option
19
- * @return void
20
- */
21
- public function sanitize_input_as_int($option)
22
- {
23
- return filter_var($option, FILTER_SANITIZE_NUMBER_INT);
24
- }
25
-
26
- /**
27
- * Sanitize input as FLOAT
28
- *
29
- * @param [type] $option
30
- * @return void
31
- */
32
- public function sanitize_input_as_float($option)
33
- {
34
- return filter_var($option, FILTER_VALIDATE_FLOAT);
35
- }
36
-
37
- /**
38
- * Sanitize input as STRING
39
- *
40
- * @param [type] $option
41
- * @return void
42
- */
43
- public function sanitize_input_as_string($option)
44
- {
45
- return filter_var($option, FILTER_SANITIZE_STRING);
46
- }
47
-
48
- /**
49
- * Sanitize input as ABSOLUTE PATH
50
- *
51
- * @param [type] $option
52
- * @return void
53
- */
54
- public function sanitize_input_as_absolute_path($option)
55
- {
56
- $path = filter_var($option, FILTER_SANITIZE_URL);
57
-
58
- try {
59
- $option = Util::normalizePath($path);
60
- } catch (Exception $e) {
61
- add_settings_error('xcloner_error_message', '', __($e->getMessage()), 'error');
62
- }
63
-
64
- if ($path and !is_dir($path)) {
65
- add_settings_error('xcloner_error_message', '', __(sprintf('Invalid Server Path %s', $option)), 'error');
66
-
67
- return false;
68
- }
69
-
70
- return $path;
71
- }
72
-
73
- /**
74
- * Sanitize input as PATH
75
- *
76
- * @param [type] $option
77
- * @return void
78
- */
79
- public function sanitize_input_as_path($option)
80
- {
81
- return filter_var($option, FILTER_SANITIZE_URL);
82
- }
83
-
84
- /**
85
- * Sanitize input as RELATIVE PATH
86
- *
87
- * @param [type] $option
88
- * @return void
89
- */
90
- public function sanitize_input_as_relative_path($option)
91
- {
92
- $option = filter_var($option, FILTER_SANITIZE_URL);
93
- $option = str_replace("..", "", $option);
94
-
95
- return $option;
96
- }
97
-
98
- /**
99
- * Sanitize input as EMAIL
100
- *
101
- * @param [type] $option
102
- * @return void
103
- */
104
- public function sanitize_input_as_email($option)
105
- {
106
- return filter_var($option, FILTER_SANITIZE_EMAIL);
107
- }
108
-
109
- /**
110
- * Undocumented function as RAW
111
- *
112
- * @param [type] $option
113
- * @return void
114
- */
115
- public function sanitize_input_as_raw($option)
116
- {
117
- return filter_var($option, FILTER_UNSAFE_RAW);
118
- }
119
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-scheduler.php DELETED
@@ -1,487 +0,0 @@
1
- <?php
2
-
3
- class Xcloner_Scheduler
4
- {
5
- private $db;
6
- private $scheduler_table = "xcloner_scheduler";
7
-
8
- private $xcloner_remote_storage;
9
- private $archive_system;
10
- private $xcloner_database;
11
- private $xcloner_settings;
12
- private $logger;
13
- private $xcloner_file_system;
14
- private $xcloner_encryption;
15
- private $xcloner_container;
16
-
17
- private $allowed_schedules = array("hourly", "twicedaily", "daily", "weekly", "monthly");
18
-
19
- /*public function __call($method, $args) {
20
- echo "$method is not defined";
21
- }*/
22
-
23
- public function __construct(Xcloner $xcloner_container)
24
- {
25
- //global $wpdb;
26
-
27
- $this->xcloner_container = $xcloner_container;
28
- $this->xcloner_database = $this->get_xcloner_container()->get_xcloner_database();
29
- $this->xcloner_settings = $this->xcloner_container->get_xcloner_settings();
30
-
31
- $this->db = $this->xcloner_database;
32
- $this->db->show_errors = false;
33
-
34
- $this->scheduler_table = $this->xcloner_settings->get_table_prefix().$this->scheduler_table;
35
- }
36
-
37
- private function get_xcloner_container()
38
- {
39
- return $this->xcloner_container;
40
- }
41
-
42
- private function set_xcloner_container(Xcloner $container)
43
- {
44
- $this->xcloner_container = $container;
45
- }
46
-
47
- public function get_scheduler_list($return_only_enabled = 0)
48
- {
49
- $list = $this->db->get_results("SELECT * FROM ".$this->scheduler_table);
50
-
51
- if ($return_only_enabled) {
52
- $new_list = array();
53
-
54
- foreach ($list as $res) {
55
- if ($res->status) {
56
- $res->next_run_time = wp_next_scheduled('xcloner_scheduler_'.$res->id, array($res->id)) + ($this->xcloner_settings->get_xcloner_option('gmt_offset') * HOUR_IN_SECONDS);
57
- if ($res->next_run_time) {
58
- $new_list[] = $res;
59
- }
60
- }
61
- }
62
- $list = $new_list;
63
- }
64
-
65
- return $list;
66
- }
67
-
68
- public function get_next_run_schedule()
69
- {
70
- $list = $this->get_scheduler_list($return_only_enabled = 1);
71
-
72
- return $list;
73
- }
74
-
75
- public function get_schedule_by_id_object($id)
76
- {
77
- $data = $this->db->get_row("SELECT * FROM ".$this->scheduler_table." WHERE id=".$id);
78
-
79
- if (!$data) {
80
- return false;
81
- }
82
-
83
- return $data;
84
- }
85
-
86
- /**
87
- * Get schedule by id or name
88
- *
89
- * @param [type] $id
90
- * @return array
91
- */
92
- public function get_schedule_by_id_or_name($id)
93
- {
94
- $data = $this->db->get_row("SELECT * FROM ".$this->scheduler_table." WHERE id='".$id."' or name='".$id."'", ARRAY_A);
95
-
96
- if (!$data) {
97
- return false;
98
- }
99
-
100
- return $data;
101
- }
102
-
103
- /**
104
- * Get schedule by id
105
- *
106
- * @param [type] $id
107
- * @return array
108
- */
109
- public function get_schedule_by_id($id)
110
- {
111
- $data = $this->db->get_row("SELECT * FROM ".$this->scheduler_table." WHERE id=".$id, ARRAY_A);
112
-
113
- if (!$data) {
114
- return false;
115
- }
116
-
117
- $params = json_decode($data['params']);
118
-
119
- //print_r($params);
120
- $data['params'] = "";
121
- $data['backup_params'] = $params->backup_params;
122
- $data['table_params'] = json_encode($params->database);
123
- $data['excluded_files'] = json_encode($params->excluded_files);
124
-
125
- return $data;
126
- }
127
-
128
- public function delete_schedule_by_id($id)
129
- {
130
- $hook = 'xcloner_scheduler_'.$id;
131
- wp_clear_scheduled_hook($hook, array($id));
132
-
133
- $data = $this->db->delete($this->scheduler_table, array('id' => $id));
134
-
135
- return $data;
136
- }
137
-
138
- public function deactivate_wp_cron_hooks()
139
- {
140
- $list = $this->get_scheduler_list();
141
-
142
- foreach ($list as $schedule) {
143
- $hook = 'xcloner_scheduler_'.$schedule->id;
144
-
145
- if ($timestamp = wp_next_scheduled($hook, array($schedule->id))) {
146
- wp_unschedule_event($timestamp, $hook, array($schedule->id));
147
- }
148
- }
149
- }
150
-
151
- public function update_wp_cron_hooks()
152
- {
153
- $list = $this->get_scheduler_list();
154
-
155
- foreach ($list as $schedule) {
156
- $hook = 'xcloner_scheduler_'.$schedule->id;
157
-
158
- //adding the xcloner_scheduler hook with xcloner_scheduler_callback callback
159
- $this->xcloner_container->get_loader()->add_action($hook, $this, 'xcloner_scheduler_callback', 10, 1);
160
-
161
- if (!wp_next_scheduled($hook, array($schedule->id)) and $schedule->status) {
162
- if ($schedule->recurrence == "single") {
163
- wp_schedule_single_event(strtotime($schedule->start_at), $hook, array($schedule->id));
164
- } else {
165
- wp_schedule_event(strtotime($schedule->start_at), $schedule->recurrence, $hook, array($schedule->id));
166
- }
167
- } elseif (!$schedule->status) {
168
- if ($timestamp = wp_next_scheduled($hook, array($schedule->id))) {
169
- wp_unschedule_event($timestamp, $hook, array($schedule->id));
170
- }
171
- }
172
- }
173
- }
174
-
175
- public function update_cron_hook($id)
176
- {
177
- $schedule = $this->get_schedule_by_id_object($id);
178
- $hook = 'xcloner_scheduler_'.$schedule->id;
179
-
180
- if ($timestamp = wp_next_scheduled($hook, array($schedule->id))) {
181
- wp_unschedule_event($timestamp, $hook, array($schedule->id));
182
- }
183
-
184
- if ($schedule->status) {
185
- if ($schedule->recurrence == "single") {
186
- wp_schedule_single_event(strtotime($schedule->start_at), $hook, array($schedule->id));
187
- } else {
188
- wp_schedule_event(strtotime($schedule->start_at), $schedule->recurrence, $hook, array($schedule->id));
189
- }
190
- }
191
- }
192
-
193
- public function disable_single_cron($schedule_id)
194
- {
195
- $schedule = array();
196
- $hook = 'xcloner_scheduler_'.$schedule_id;
197
-
198
- if ($timestamp = wp_next_scheduled($hook, array($schedule_id))) {
199
- wp_unschedule_event($timestamp, $hook, array($schedule_id));
200
- }
201
-
202
- $schedule['status'] = 0;
203
-
204
- $update = $this->db->update(
205
- $this->scheduler_table,
206
- $schedule,
207
- array('id' => $schedule_id),
208
- array(
209
- '%s',
210
- '%s'
211
- )
212
- );
213
-
214
- return $update;
215
- }
216
-
217
- public function update_hash($schedule_id, $hash)
218
- {
219
- $schedule = array();
220
-
221
- $schedule['hash'] = $hash;
222
-
223
- $update = $this->db->update(
224
- $this->scheduler_table,
225
- $schedule,
226
- array('id' => $schedule_id),
227
- array(
228
- '%s',
229
- '%s'
230
- )
231
- );
232
-
233
- return $update;
234
- }
235
-
236
- public function update_last_backup($schedule_id, $last_backup)
237
- {
238
- $schedule = array();
239
-
240
- $this->logger->info(sprintf('Updating last backup %s for schedule id #%s', $last_backup, $schedule_id));
241
-
242
- $schedule['last_backup'] = $last_backup;
243
-
244
- $update = $this->db->update(
245
- $this->scheduler_table,
246
- $schedule,
247
- array('id' => $schedule_id),
248
- array(
249
- '%s',
250
- '%s'
251
- )
252
- );
253
-
254
- return $update;
255
- }
256
-
257
- private function _xcloner_scheduler_callback($id, $schedule, $xcloner = "")
258
- {
259
- set_time_limit(0);
260
-
261
- $start_time = time();
262
-
263
- if (!$xcloner) {
264
- $xcloner = new XCloner();
265
- $xcloner->init();
266
- }
267
- $this->set_xcloner_container($xcloner);
268
- $return_encrypted = array();
269
- $return = array();
270
- $additional = array();
271
-
272
- #$hash = $this->xcloner_settings->get_hash();
273
- #$this->get_xcloner_container()->get_xcloner_settings()->set_hash($hash);
274
-
275
- //$this->xcloner_settings = $this->get_xcloner_container()->get_xcloner_settings();
276
- $this->xcloner_file_system = $this->get_xcloner_container()->get_xcloner_filesystem();
277
- $this->xcloner_encryption = $this->get_xcloner_container()->get_xcloner_encryption();
278
- $this->xcloner_database = $this->get_xcloner_container()->get_xcloner_database();
279
- $this->archive_system = $this->get_xcloner_container()->get_archive_system();
280
- $this->logger = $this->get_xcloner_container()->get_xcloner_logger()->withName("xcloner_scheduler");
281
- $this->xcloner_remote_storage = $this->get_xcloner_container()->get_xcloner_remote_storage();
282
-
283
-
284
- $this->db = $this->xcloner_database;
285
- $this->db->show_errors = false;
286
-
287
- $this->logger->info(sprintf("New schedule hash is %s", $this->xcloner_settings->get_hash()));
288
-
289
- if (isset($schedule['backup_params']->diff_start_date) && $schedule['backup_params']->diff_start_date) {
290
- $this->xcloner_file_system->set_diff_timestamp_start($schedule['backup_params']->diff_start_date);
291
- }
292
-
293
-
294
- if ($schedule['recurrence'] == "single") {
295
- $this->disable_single_cron($schedule['id']);
296
- }
297
-
298
- if (!$schedule) {
299
- $this->logger->info(sprintf("Could not load schedule with id'%s'", $id), array("CRON"));
300
-
301
- return;
302
- }
303
-
304
- //echo $this->get_xcloner_container()->get_xcloner_settings()->get_hash(); exit;
305
- if (!$xcloner) {
306
- //we update this only in WP mode
307
- $this->update_hash($schedule['id'], $this->xcloner_settings->get_hash());
308
- }
309
-
310
- $this->logger->print_info(sprintf("Starting backup profile '%s'", $schedule['name']), array("CRON"));
311
-
312
- $this->xcloner_file_system->set_excluded_files(json_decode($schedule['excluded_files']));
313
-
314
- $init = 1;
315
- $continue = 1;
316
-
317
- while ($continue) {
318
- $continue = $this->xcloner_file_system->start_file_recursion($init);
319
-
320
- $init = 0;
321
- }
322
-
323
- $this->logger->print_info(sprintf("File scan finished"), array("CRON"));
324
-
325
- $this->logger->print_info(sprintf("Starting the database backup"), array("CRON"));
326
-
327
- $init = 1;
328
- $return['finished'] = 0;
329
-
330
- while (!$return['finished']) {
331
- $return = $this->xcloner_database->start_database_recursion((array)json_decode($schedule['table_params']), $return, $init);
332
- $init = 0;
333
- }
334
-
335
- $this->logger->print_info(sprintf("Database backup done"), array("CRON"));
336
-
337
- $this->logger->print_info(sprintf("Starting file archive process"), array("CRON"));
338
-
339
- $init = 0;
340
- $return['finished'] = 0;
341
- $return['extra'] = array();
342
-
343
- while (!$return['finished']) {
344
- $return = $this->archive_system->start_incremental_backup((array)$schedule['backup_params'], $return['extra'], $init);
345
- $init = 0;
346
- }
347
- $this->logger->print_info(sprintf("File archive process FINISHED."), array("CRON"));
348
-
349
- //getting the last backup archive file
350
- $return['extra']['backup_parent'] = $this->archive_system->get_archive_name_with_extension();
351
- if ($this->xcloner_file_system->is_part($this->archive_system->get_archive_name_with_extension())) {
352
- $return['extra']['backup_parent'] = $this->archive_system->get_archive_name_multipart();
353
- }
354
-
355
- //Updating schedule last backup archive
356
- $this->update_last_backup($schedule['id'], $return['extra']['backup_parent']);
357
-
358
- //Encrypting the backup archive
359
- $return_encrypted['finished'] = 0;
360
- $return_encrypted['start'] = 0;
361
- $return_encrypted['iv'] = '';
362
- $return_encrypted['target_file'] = '';
363
- $part = 0;
364
- $backup_parts = array();
365
-
366
- if (isset($schedule['backup_params']->backup_encrypt) && $schedule['backup_params']->backup_encrypt) {
367
- $this->logger->print_info(sprintf("Encrypting backup archive %s.", $return['extra']['backup_parent']), array("CRON"));
368
-
369
- $backup_file = $return['extra']['backup_parent'];
370
-
371
- if ($this->xcloner_file_system->is_multipart($return['extra']['backup_parent'])) {
372
- $backup_parts = $this->xcloner_file_system->get_multipart_files($return['extra']['backup_parent']);
373
- $backup_file = $backup_parts[$part];
374
- }
375
-
376
- while (!$return_encrypted['finished']) {
377
- $return_encrypted = $this->xcloner_encryption->encrypt_file(
378
- $backup_file,
379
- "",
380
- "",
381
- "",
382
- "",
383
- true,
384
- true
385
- );
386
-
387
- if ($return_encrypted['finished']) {
388
- ++$part;
389
-
390
- if ($part < sizeof($backup_parts)) {
391
- $return_encrypted['finished'] = 0;
392
- $backup_file = $backup_parts[$part];
393
- }
394
- }
395
- }
396
- }
397
-
398
- //Sending backup to remote storage
399
- if (isset($schedule['remote_storage']) && $schedule['remote_storage'] && array_key_exists($schedule['remote_storage'], $this->xcloner_remote_storage->get_available_storages())) {
400
- $backup_file = $return['extra']['backup_parent'];
401
-
402
- $this->logger->print_info(sprintf("Transferring backup to remote storage %s", strtoupper($schedule['remote_storage'])), array("CRON"));
403
-
404
- if (method_exists($this->xcloner_remote_storage, "upload_backup_to_storage")) {
405
- call_user_func_array(array(
406
- $this->xcloner_remote_storage,
407
- "upload_backup_to_storage"
408
- ), array($backup_file, $schedule['remote_storage'], $schedule['backup_params']->backup_delete_after_remote_transfer));
409
- }
410
- }
411
-
412
- //Sending email notification
413
- if (isset($schedule['backup_params']->email_notification) and $to = $schedule['backup_params']->email_notification) {
414
- try {
415
- $from = "";
416
- $additional['lines_total'] = $return['extra']['lines_total'];
417
- $subject = sprintf(__("%s - new backup generated %s"), $schedule['name'], $return['extra']['backup_parent']);
418
-
419
- $this->archive_system->send_notification($to, $from, $subject, $return['extra']['backup_parent'], $schedule, "", $additional);
420
- } catch (Exception $e) {
421
- $this->logger->error($e->getMessage());
422
- }
423
- }
424
-
425
- //Backup Storage Cleanup
426
- $this->xcloner_file_system->backup_storage_cleanup();
427
-
428
- //Filesystem Cleanup
429
- $this->xcloner_file_system->cleanup_tmp_directories();
430
-
431
- //Removing the tmp filesystem used for backup
432
- $this->xcloner_file_system->remove_tmp_filesystem();
433
-
434
- $this->logger->print_info(sprintf("Profile '%s' finished in %d seconds.", $schedule['name'], time() - $start_time), array("CRON"));
435
-
436
- return $return;
437
- }
438
-
439
- public function xcloner_scheduler_callback($id, $schedule = "", $xcloner = "")
440
- {
441
- if ($id) {
442
- $schedule = $this->get_schedule_by_id($id);
443
- }
444
-
445
- try {
446
- if ($this->xcloner_settings->get_xcloner_option('xcloner_disable_email_notification')) {
447
- //we disable email notifications
448
- $schedule['backup_params']->email_notification = "";
449
- }
450
-
451
- return $this->_xcloner_scheduler_callback($id, $schedule, $xcloner);
452
- } catch (Exception $e) {
453
-
454
- //send email to site admin if email notification is not set in the scheduler
455
- if (!isset($schedule['backup_params']->email_notification) || !$schedule['backup_params']->email_notification) {
456
- $schedule['backup_params']->email_notification = $this->xcloner_settings->get_xcloner_option('admin_email');
457
- }
458
-
459
- if (isset($schedule['backup_params']->email_notification) && $to = $schedule['backup_params']->email_notification) {
460
- $from = "";
461
- $this->archive_system->send_notification($to, $from, $schedule['name']." - backup error", "", "", $e->getMessage());
462
- }
463
- }
464
- }
465
-
466
- public function get_available_intervals()
467
- {
468
- $schedules = wp_get_schedules();
469
- $new_schedules = array();
470
-
471
- foreach ($schedules as $key => $row) {
472
- if (in_array($key, $this->allowed_schedules)) {
473
- $new_schedules[$key] = $row;
474
- $intervals[$key] = $row['interval'];
475
- }
476
- }
477
-
478
- array_multisort($intervals, SORT_ASC, $new_schedules);
479
-
480
- $new_schedules['profile'] = [
481
- 'interval'=> '-1',
482
- 'display'=> 'Manual Execution'
483
- ];
484
-
485
- return $new_schedules;
486
- }
487
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-settings.php DELETED
@@ -1,1168 +0,0 @@
1
- <?php
2
-
3
- class Xcloner_Settings
4
- {
5
- private $logger_file = "xcloner_main_%s.log";
6
- private $logger_file_hash = "xcloner%s.log";
7
- private $hash;
8
- private $xcloner_sanitization;
9
- private $xcloner_container;
10
- private $xcloner_database;
11
- private $xcloner_options_prefix = "xcloner";
12
-
13
- /**
14
- * XCloner General Settings Class
15
- *
16
- * @param Xcloner $xcloner_container
17
- * @param string $hash
18
- */
19
- public function __construct(Xcloner $xcloner_container, $hash = "", $json_config = "")
20
- {
21
- if ($json_config) {
22
- foreach ($json_config as $item) {
23
- add_option($item->option_name, $item->option_value);
24
- }
25
- }
26
-
27
- $this->xcloner_container = $xcloner_container;
28
-
29
- $this->xcloner_database = $xcloner_container->get_xcloner_database();
30
-
31
- if (isset($hash)) {
32
- $this->set_hash($hash);
33
- }
34
- }
35
-
36
- /**
37
- * XCloner options prefix
38
- *
39
- * @return string
40
- */
41
- public function get_options_prefix() {
42
- return $this->xcloner_options_prefix;
43
- }
44
-
45
- /**
46
- * Get XCloner Main Container
47
- *
48
- * @return void
49
- */
50
- private function get_xcloner_container()
51
- {
52
- return $this->xcloner_container;
53
- }
54
-
55
- /**
56
- * Get Logger Filename Setting
57
- *
58
- * @param integer $include_hash
59
- * @return void
60
- */
61
- public function get_logger_filename($include_hash = 0)
62
- {
63
- if ($include_hash) {
64
- $filename = sprintf($this->logger_file_hash, $this->get_hash());
65
- } else {
66
- $filename = sprintf($this->logger_file, $this->get_server_unique_hash(5));
67
- }
68
-
69
- return $filename;
70
- }
71
-
72
- /**
73
- * Get XCloner Backup Start Path Setting
74
- *
75
- * @return void
76
- */
77
- public function get_xcloner_start_path()
78
- {
79
- if (!$this->get_xcloner_option('xcloner_start_path') or !is_dir(/** @scrutinizer ignore-type */$this->get_xcloner_option('xcloner_start_path'))) {
80
- $path = realpath(ABSPATH);
81
- } else {
82
- $path = $this->get_xcloner_option('xcloner_start_path');
83
- }
84
-
85
- return $path;
86
- }
87
-
88
- /**
89
- * Get XCloner Start Path Setting , function is in legacy mode
90
- *
91
- * @param [type] $dir
92
- * @return void
93
- */
94
- public function get_xcloner_dir_path($dir)
95
- {
96
- $path = $this->get_xcloner_start_path().DS.$dir;
97
-
98
- return $path;
99
- }
100
-
101
- /**
102
- * Get XCloner Backup Store Path Setting
103
- *
104
- * @return void
105
- */
106
- public function get_xcloner_store_path()
107
- {
108
- if (!$this->get_xcloner_option('xcloner_store_path') or !is_dir(/** @scrutinizer ignore-type */$this->get_xcloner_option('xcloner_store_path'))) {
109
- return $this->xcloner_container->check_dependencies();
110
- } else {
111
- $path = $this->get_xcloner_option('xcloner_store_path');
112
- }
113
-
114
- return $path;
115
- }
116
-
117
- /**
118
- * Get XCloner Encryption Key
119
- *
120
- * @return void
121
- */
122
- public function get_xcloner_encryption_key()
123
- {
124
- if (!$key = $this->get_xcloner_option('xcloner_encryption_key')) {
125
- $key = $this->xcloner_container->randomString(35);
126
- update_option('xcloner_encryption_key', $key);
127
- }
128
-
129
- return $key;
130
- }
131
-
132
- /**
133
- * Create a random string
134
- * @author XEWeb <>
135
- * @param $length the length of the string to create
136
- * @return string
137
- */
138
- /*public function randomString($length = 6) {
139
- $str = "";
140
- $characters = array_merge(range('A', 'Z'), range('a', 'z'), range('0', '9'));
141
- $max = count($characters) - 1;
142
- for ($i = 0; $i < $length; $i++) {
143
- $rand = mt_rand(0, $max);
144
- $str .= $characters[$rand];
145
- }
146
- return $str;
147
- }*/
148
-
149
- public function get_xcloner_tmp_path_suffix()
150
- {
151
- return "xcloner".$this->get_hash();
152
- }
153
-
154
- /**
155
- * Get XCloner Temporary Path
156
- *
157
- * @param boolean $suffix
158
- * @return void
159
- */
160
- public function get_xcloner_tmp_path($suffix = true)
161
- {
162
- if ($this->get_xcloner_option('xcloner_force_tmp_path_site_root')) {
163
- $path = $this->get_xcloner_store_path();
164
- } else {
165
- $path = sys_get_temp_dir();
166
- if (!is_dir($path)) {
167
- try {
168
- mkdir($path);
169
- chmod($path, 0777);
170
- } catch (Exception $e) {
171
- //silent catch
172
- }
173
- }
174
-
175
- if (!is_dir($path) or !is_writeable($path)) {
176
- $path = $this->get_xcloner_store_path();
177
- }
178
- }
179
-
180
- if ($suffix) {
181
- $path = $path.DS.".".$this->get_xcloner_tmp_path_suffix();
182
- }
183
-
184
- return $path;
185
- }
186
-
187
- /**
188
- * Get Enable Mysql Backup Option
189
- *
190
- * @return void
191
- */
192
- public function get_enable_mysql_backup()
193
- {
194
- if ($this->get_xcloner_option('xcloner_enable_mysql_backup')) {
195
- return true;
196
- }
197
-
198
- return false;
199
- }
200
-
201
- /**
202
- * Get Backup Extension Name
203
- *
204
- * @param string $ext
205
- * @return string ( hash.(tar|tgz) )
206
- */
207
- public function get_backup_extension_name($ext = "")
208
- {
209
- if (!$ext) {
210
- if ($this->get_xcloner_option('xcloner_backup_compression_level')) {
211
- $ext = ".tgz";
212
- } else {
213
- $ext = ".tar";
214
- }
215
- }
216
-
217
- return ($this->get_hash()).$ext;
218
- }
219
-
220
- /**
221
- * Get Backup Hash
222
- *
223
- * @return void
224
- */
225
- public function get_hash($readonly = false)
226
- {
227
- if (!$this->hash && !$readonly) {
228
- $this->set_hash("-".$this->get_server_unique_hash(5));
229
- }
230
-
231
- //echo $this->hash;
232
- return $this->hash;
233
- }
234
-
235
- /**
236
- * Generate New Hash
237
- *
238
- * @return void
239
- */
240
- public function generate_new_hash()
241
- {
242
- $hash = "-".md5(rand());
243
-
244
- $hash = substr($hash, 0, 6);
245
-
246
- $this->set_hash($hash);
247
-
248
- return $hash;
249
- }
250
-
251
- /**
252
- * Set New Hash
253
- *
254
- * @param string $hash
255
- * @return void
256
- */
257
- public function set_hash($hash = "")
258
- {
259
- if (substr($hash, 0, 1) != "-" and strlen($hash)) {
260
- $hash = "-".$hash;
261
- }
262
-
263
- $this->hash = substr($hash, 0, 6);
264
-
265
- return $this;
266
- }
267
-
268
- /**
269
- * Get Default Backup Name
270
- *
271
- * @return void
272
- */
273
- public function get_default_backup_name()
274
- {
275
- $data = parse_url(get_site_url());
276
-
277
- $backup_name = "backup_[domain]".(isset($data['port']) ? "_".$data['port'] : "")."-[time]-".($this->get_enable_mysql_backup() ? "sql" : "nosql");
278
-
279
- return $backup_name;
280
- }
281
-
282
- /**
283
- * Get Database Hostname
284
- *
285
- * @return void
286
- */
287
- public function get_db_hostname()
288
- {
289
- if (!$data = $this->get_xcloner_option('xcloner_mysql_hostname')) {
290
- // $data = $this->xcloner_database->getDbHost();
291
- }
292
-
293
- return $data;
294
- }
295
-
296
- /**
297
- * Get Database Username
298
- *
299
- * @return void
300
- */
301
- public function get_db_username()
302
- {
303
- if (!$data = $this->get_xcloner_option('xcloner_mysql_username')) {
304
- //$data = $this->xcloner_database->getDbUser();
305
- }
306
-
307
- return $data;
308
- }
309
-
310
- /**
311
- * Get Database Password
312
- *
313
- * @return void
314
- */
315
- public function get_db_password()
316
- {
317
- if (!$data = $this->get_xcloner_option('xcloner_mysql_password')) {
318
- //$data = $this->xcloner_database->getDbPassword();
319
- }
320
-
321
- return $data;
322
- }
323
-
324
- /**
325
- * Get Database Name
326
- *
327
- * @return void
328
- */
329
- public function get_db_database()
330
- {
331
- if (!$data = $this->get_xcloner_option('xcloner_mysql_database')) {
332
- //$data = $this->xcloner_database->getDbName();
333
- }
334
-
335
- return $data;
336
- }
337
-
338
- /**
339
- * Get Database Tables Prefix
340
- *
341
- * @return void
342
- */
343
- public function get_table_prefix()
344
- {
345
- return $this->get_xcloner_option('xcloner_mysql_prefix');
346
- }
347
-
348
- /**
349
- * @param string $option
350
- */
351
- public function get_xcloner_option($option = "")
352
- {
353
- $data = get_option($option);
354
-
355
- return $data;
356
- }
357
-
358
- /**
359
- * Get Server Unique Hash used to generate the unique backup name
360
- *
361
- * @param integer $strlen
362
- * @return void
363
- */
364
- public function get_server_unique_hash($strlen = 0)
365
- {
366
- $hash = md5(get_home_url().__DIR__.$this->get_xcloner_encryption_key());
367
-
368
- if ($strlen) {
369
- $hash = substr($hash, 0, $strlen);
370
- }
371
-
372
- return $hash;
373
- }
374
-
375
- public function settings_init()
376
- {
377
- $this->xcloner_sanitization = $this->get_xcloner_container()->get_xcloner_sanitization();
378
-
379
- //ADDING MISSING OPTIONS
380
- if (false == $this->get_xcloner_option('xcloner_mysql_settings_page')) {
381
- update_option('xcloner_mysql_settings_page', '');
382
- } // end if
383
-
384
- if (false == $this->get_xcloner_option('xcloner_cron_settings_page')) {
385
- update_option('xcloner_cron_settings_page', '');
386
- } // end if
387
-
388
- if (false == $this->get_xcloner_option('xcloner_system_settings_page')) {
389
- update_option('xcloner_system_settings_page', '');
390
- } // end if
391
-
392
- if (false == $this->get_xcloner_option('xcloner_cleanup_settings_page')) {
393
- update_option('xcloner_cleanup_settings_page', '');
394
- } // end if
395
-
396
-
397
- //ADDING SETTING SECTIONS
398
- //GENERAL section
399
- add_settings_section(
400
- 'xcloner_general_settings_group',
401
- __(' '),
402
- array($this, 'xcloner_settings_section_cb'),
403
- 'xcloner_settings_page'
404
- );
405
- //MYSQL section
406
- add_settings_section(
407
- 'xcloner_mysql_settings_group',
408
- __(' '),
409
- array($this, 'xcloner_settings_section_cb'),
410
- 'xcloner_mysql_settings_page'
411
- );
412
-
413
- //SYSTEM section
414
- add_settings_section(
415
- 'xcloner_system_settings_group',
416
- __('These are advanced options recommended for developers!', 'xcloner-backup-and-restore'),
417
- array($this, 'xcloner_settings_section_cb'),
418
- 'xcloner_system_settings_page'
419
- );
420
-
421
- //CLEANUP section
422
- add_settings_section(
423
- 'xcloner_cleanup_settings_group',
424
- __(' '),
425
- array($this, 'xcloner_settings_section_cb'),
426
- 'xcloner_cleanup_settings_page'
427
- );
428
-
429
-
430
- //CRON section
431
- add_settings_section(
432
- 'xcloner_cron_settings_group',
433
- __(' '),
434
- array($this, 'xcloner_settings_section_cb'),
435
- 'xcloner_cron_settings_page'
436
- );
437
-
438
-
439
- //REGISTERING THE 'GENERAL SECTION' FIELDS
440
- register_setting('xcloner_general_settings_group', 'xcloner_backup_compression_level', array(
441
- $this->xcloner_sanitization,
442
- "sanitize_input_as_int"
443
- ));
444
- add_settings_field(
445
- 'xcloner_backup_compression_level',
446
- __('Backup Compression Level', 'xcloner-backup-and-restore'),
447
- array($this, 'do_form_range_field'),
448
- 'xcloner_settings_page',
449
- 'xcloner_general_settings_group',
450
- array(
451
- 'xcloner_backup_compression_level',
452
- __('Options between [0-9]. Value 0 means no compression, while 9 is maximum compression affecting cpu load', 'xcloner-backup-and-restore'),
453
- 0,
454
- 9
455
- )
456
- );
457
-
458
- register_setting('xcloner_general_settings_group', 'xcloner_start_path', array(
459
- $this->xcloner_sanitization,
460
- "sanitize_input_as_absolute_path"
461
- ));
462
- add_settings_field(
463
- 'xcloner_start_path',
464
- __('Backup Start Location', 'xcloner-backup-and-restore'),
465
- array($this, 'do_form_text_field'),
466
- 'xcloner_settings_page',
467
- 'xcloner_general_settings_group',
468
- array(
469
- 'xcloner_start_path',
470
- __('Base path location from where XCloner can start the Backup.', 'xcloner-backup-and-restore'),
471
- $this->get_xcloner_start_path(),
472
- //'disabled'
473
- )
474
- );
475
-
476
- register_setting('xcloner_general_settings_group', 'xcloner_store_path', array(
477
- $this->xcloner_sanitization,
478
- "sanitize_input_as_absolute_path"
479
- ));
480
- add_settings_field(
481
- 'xcloner_store_path',
482
- __('Backup Storage Location', 'xcloner-backup-and-restore'),
483
- array($this, 'do_form_text_field'),
484
- 'xcloner_settings_page',
485
- 'xcloner_general_settings_group',
486
- array(
487
- 'xcloner_store_path',
488
- __('Location where XCloner will store the Backup archives.', 'xcloner-backup-and-restore'),
489
- $this->get_xcloner_store_path(),
490
- //'disabled'
491
- )
492
- );
493
-
494
- register_setting('xcloner_general_settings_group', 'xcloner_encryption_key', array(
495
- $this->xcloner_sanitization,
496
- "sanitize_input_as_string"
497
- ));
498
- add_settings_field(
499
- 'xcloner_encryption_key',
500
- __('Backup Encryption Key', 'xcloner-backup-and-restore'),
501
- array($this, 'do_form_text_field'),
502
- 'xcloner_settings_page',
503
- 'xcloner_general_settings_group',
504
- array(
505
- 'xcloner_encryption_key',
506
- __('Backup Encryption Key used to Encrypt/Decrypt backups, you might want to save this somewhere else as well.', 'xcloner-backup-and-restore'),
507
- $this->get_xcloner_encryption_key(),
508
- //'disabled'
509
- )
510
- );
511
-
512
- register_setting('xcloner_general_settings_group', 'xcloner_enable_log', array(
513
- $this->xcloner_sanitization,
514
- "sanitize_input_as_int"
515
- ));
516
- add_settings_field(
517
- 'xcloner_enable_log',
518
- __('Enable XCloner Backup Log', 'xcloner-backup-and-restore'),
519
- array($this, 'do_form_switch_field'),
520
- 'xcloner_settings_page',
521
- 'xcloner_general_settings_group',
522
- array(
523
- 'xcloner_enable_log',
524
- sprintf(__('Enable the XCloner Backup log. You will find it stored unde the Backup Storage Location, file %s', 'xcloner-backup-and-restore'), $this->get_logger_filename())
525
- )
526
- );
527
-
528
- register_setting('xcloner_general_settings_group', 'xcloner_enable_pre_update_backup', array(
529
- $this->xcloner_sanitization,
530
- "sanitize_input_as_int"
531
- ));
532
- add_settings_field(
533
- 'xcloner_enable_pre_update_backup',
534
- __('Generate Backups before Automatic WP Upgrades', 'xcloner-backup-and-restore'),
535
- array($this, 'do_form_switch_field'),
536
- 'xcloner_settings_page',
537
- 'xcloner_general_settings_group',
538
- array(
539
- 'xcloner_enable_pre_update_backup',
540
- sprintf(__('Attempt to generate a full site backup before applying automatic core updates.', 'xcloner-backup-and-restore'), $this->get_logger_filename())
541
- )
542
- );
543
-
544
- register_setting('xcloner_general_settings_group', 'xcloner_regex_exclude', array(
545
- $this->xcloner_sanitization,
546
- "sanitize_input_as_raw"
547
- ));
548
- add_settings_field(
549
- 'xcloner_regex_exclude',
550
- __('Regex Exclude Files', 'xcloner-backup-and-restore'),
551
- array($this, 'do_form_textarea_field'),
552
- 'xcloner_settings_page',
553
- 'xcloner_general_settings_group',
554
- array(
555
- 'xcloner_regex_exclude',
556
- __('Regular expression match to exclude files and folders, example patterns provided below, one pattern per line', 'xcloner-backup-and-restore'),
557
- //$this->get_xcloner_store_path(),
558
- //'disabled'
559
- )
560
- );
561
-
562
- //REGISTERING THE 'MYSQL SECTION' FIELDS
563
- register_setting('xcloner_mysql_settings_group', 'xcloner_enable_mysql_backup', array(
564
- $this->xcloner_sanitization,
565
- "sanitize_input_as_int"
566
- ));
567
- add_settings_field(
568
- 'xcloner_enable_mysql_backup',
569
- __('Enable Mysql Backup', 'xcloner-backup-and-restore'),
570
- array($this, 'do_form_switch_field'),
571
- 'xcloner_mysql_settings_page',
572
- 'xcloner_mysql_settings_group',
573
- array(
574
- 'xcloner_enable_mysql_backup',
575
- __('Enable Mysql Backup Option. If you don\'t want to backup the database, you can disable this.', 'xcloner-backup-and-restore')
576
- )
577
- );
578
-
579
- register_setting('xcloner_mysql_settings_group', 'xcloner_backup_only_wp_tables');
580
- add_settings_field(
581
- 'xcloner_backup_only_wp_tables',
582
- __('Backup only WP tables', 'xcloner-backup-and-restore'),
583
- array($this, 'do_form_switch_field'),
584
- 'xcloner_mysql_settings_page',
585
- 'xcloner_mysql_settings_group',
586
- array(
587
- 'xcloner_backup_only_wp_tables',
588
- sprintf(__('Enable this if you only want to Backup only tables starting with \'%s\' prefix', 'xcloner-backup-and-restore'), $this->get_table_prefix())
589
- )
590
- );
591
-
592
- register_setting('xcloner_mysql_settings_group', 'xcloner_mysql_hostname', array(
593
- $this->xcloner_sanitization,
594
- "sanitize_input_as_raw"
595
- ));
596
- add_settings_field(
597
- 'xcloner_mysql_hostname',
598
- __('Mysql Hostname', 'xcloner-backup-and-restore'),
599
- array($this, 'do_form_text_field'),
600
- 'xcloner_mysql_settings_page',
601
- 'xcloner_mysql_settings_group',
602
- array(
603
- 'xcloner_mysql_hostname',
604
- __('Wordpress mysql hostname', 'xcloner-backup-and-restore'),
605
- $this->get_db_hostname(),
606
- //'disabled'
607
- )
608
- );
609
-
610
- register_setting('xcloner_mysql_settings_group', 'xcloner_mysql_username', array(
611
- $this->xcloner_sanitization,
612
- "sanitize_input_as_raw"
613
- ));
614
- add_settings_field(
615
- 'xcloner_mysql_username',
616
- __('Mysql Username', 'xcloner-backup-and-restore'),
617
- array($this, 'do_form_text_field'),
618
- 'xcloner_mysql_settings_page',
619
- 'xcloner_mysql_settings_group',
620
- array(
621
- 'xcloner_mysql_username',
622
- __('Wordpress mysql username', 'xcloner-backup-and-restore'),
623
- $this->get_db_username(),
624
- //'disabled'
625
- )
626
- );
627
-
628
- register_setting('xcloner_mysql_settings_group', 'xcloner_mysql_password', array(
629
- $this->xcloner_sanitization,
630
- "sanitize_input_as_raw"
631
- ));
632
- add_settings_field(
633
- 'xcloner_mysql_password',
634
- __('Mysql Password', 'xcloner-backup-and-restore'),
635
- array($this, 'do_form_password_field'),
636
- 'xcloner_mysql_settings_page',
637
- 'xcloner_mysql_settings_group',
638
- array(
639
- 'xcloner_mysql_password',
640
- __('Wordpress mysql password', 'xcloner-backup-and-restore'),
641
- $this->get_db_username(),
642
- //'disabled'
643
- )
644
- );
645
-
646
- register_setting('xcloner_mysql_settings_group', 'xcloner_mysql_database', array(
647
- $this->xcloner_sanitization,
648
- "sanitize_input_as_raw"
649
- ));
650
- add_settings_field(
651
- 'xcloner_mysql_database',
652
- __('Mysql Database', 'xcloner-backup-and-restore'),
653
- array($this, 'do_form_text_field'),
654
- 'xcloner_mysql_settings_page',
655
- 'xcloner_mysql_settings_group',
656
- array(
657
- 'xcloner_mysql_database',
658
- __('Wordpress mysql database', 'xcloner-backup-and-restore'),
659
- $this->get_db_database(),
660
- //'disabled'
661
- )
662
- );
663
-
664
- register_setting('xcloner_mysql_settings_group', 'xcloner_mysql_prefix', array(
665
- $this->xcloner_sanitization,
666
- "sanitize_input_as_raw"
667
- ));
668
- add_settings_field(
669
- 'xcloner_mysql_prefix',
670
- __('Mysql Tables Prefix', 'xcloner-backup-and-restore'),
671
- array($this, 'do_form_text_field'),
672
- 'xcloner_mysql_settings_page',
673
- 'xcloner_mysql_settings_group',
674
- array(
675
- 'xcloner_mysql_prefix',
676
- __('Wordpress mysql tables prefix', 'xcloner-backup-and-restore'),
677
- $this->get_table_prefix(),
678
- //'disabled'
679
- )
680
- );
681
-
682
- //REGISTERING THE 'SYSTEM SECTION' FIELDS
683
- register_setting('xcloner_system_settings_group', 'xcloner_size_limit_per_request', array(
684
- $this->xcloner_sanitization,
685
- "sanitize_input_as_int"
686
- ));
687
- add_settings_field(
688
- 'xcloner_size_limit_per_request',
689
- __('Data Size Limit Per Request', 'xcloner-backup-and-restore'),
690
- array($this, 'do_form_range_field'),
691
- 'xcloner_system_settings_page',
692
- 'xcloner_system_settings_group',
693
- array(
694
- 'xcloner_size_limit_per_request',
695
- __('Use this option to set how much file data can XCloner backup in one AJAX request. Range 0-1024 MB', 'xcloner-backup-and-restore'),
696
- 0,
697
- 1024
698
- )
699
- );
700
-
701
- register_setting('xcloner_system_settings_group', 'xcloner_files_to_process_per_request', array(
702
- $this->xcloner_sanitization,
703
- "sanitize_input_as_int"
704
- ));
705
- add_settings_field(
706
- 'xcloner_files_to_process_per_request',
707
- __('Files To Process Per Request', 'xcloner-backup-and-restore'),
708
- array($this, 'do_form_range_field'),
709
- 'xcloner_system_settings_page',
710
- 'xcloner_system_settings_group',
711
- array(
712
- 'xcloner_files_to_process_per_request',
713
- __('Use this option to set how many files XCloner should process at one time before doing another AJAX call', 'xcloner-backup-and-restore'),
714
- 0,
715
- 1000
716
- )
717
- );
718
-
719
- register_setting('xcloner_system_settings_group', 'xcloner_directories_to_scan_per_request', array(
720
- $this->xcloner_sanitization,
721
- "sanitize_input_as_int"
722
- ));
723
- add_settings_field(
724
- 'xcloner_directories_to_scan_per_request',
725
- __('Directories To Scan Per Request', 'xcloner-backup-and-restore'),
726
- array($this, 'do_form_range_field'),
727
- 'xcloner_system_settings_page',
728
- 'xcloner_system_settings_group',
729
- array(
730
- 'xcloner_directories_to_scan_per_request',
731
- __('Use this option to set how many directories XCloner should scan at one time before doing another AJAX call', 'xcloner-backup-and-restore'),
732
- 0,
733
- 1000
734
- )
735
- );
736
-
737
- register_setting('xcloner_system_settings_group', 'xcloner_database_records_per_request', array(
738
- $this->xcloner_sanitization,
739
- "sanitize_input_as_int"
740
- ));
741
- add_settings_field(
742
- 'xcloner_database_records_per_request',
743
- __('Database Records Per Request', 'xcloner-backup-and-restore'),
744
- array($this, 'do_form_range_field'),
745
- 'xcloner_system_settings_page',
746
- 'xcloner_system_settings_group',
747
- array(
748
- 'xcloner_database_records_per_request',
749
- __('Use this option to set how many database table records should be fetched per AJAX request, or set to 0 to fetch all. Range 0-100000 records', 'xcloner-backup-and-restore'),
750
- 0,
751
- 100000
752
- )
753
- );
754
-
755
- /*register_setting('xcloner_system_settings_group', 'xcloner_diff_backup_recreate_period', array($this->xcloner_sanitization, "sanitize_input_as_int"));
756
- add_settings_field(
757
- 'xcloner_diff_backup_recreate_period',
758
- __('Differetial Backups Max Days','xcloner-backup-and-restore'),
759
- array($this, 'do_form_number_field'),
760
- 'xcloner_system_settings_page',
761
- 'xcloner_system_settings_group',
762
- array('xcloner_diff_backup_recreate_period',
763
- __('Use this option to set when a full backup should be recreated if the scheduled backup type is set to \'Full Backup+Differential Backups\' ','xcloner-backup-and-restore'),
764
- )
765
- );*/
766
-
767
- register_setting('xcloner_system_settings_group', 'xcloner_exclude_files_larger_than_mb', array(
768
- $this->xcloner_sanitization,
769
- "sanitize_input_as_int"
770
- ));
771
- add_settings_field(
772
- 'xcloner_exclude_files_larger_than_mb',
773
- __('Exclude files larger than (MB)', 'xcloner-backup-and-restore'),
774
- array($this, 'do_form_number_field'),
775
- 'xcloner_system_settings_page',
776
- 'xcloner_system_settings_group',
777
- array(
778
- 'xcloner_exclude_files_larger_than_mb',
779
- __('Use this option to automatically exclude files larger than a certain size in MB, or set to 0 to include all. Range 0-1000 MB', 'xcloner-backup-and-restore'),
780
- )
781
- );
782
-
783
- register_setting('xcloner_system_settings_group', 'xcloner_split_backup_limit', array(
784
- $this->xcloner_sanitization,
785
- "sanitize_input_as_int"
786
- ));
787
- add_settings_field(
788
- 'xcloner_split_backup_limit',
789
- __('Split Backup Archive Limit (MB)', 'xcloner-backup-and-restore'),
790
- array($this, 'do_form_number_field'),
791
- 'xcloner_system_settings_page',
792
- 'xcloner_system_settings_group',
793
- array(
794
- 'xcloner_split_backup_limit',
795
- __('Use this option to automatically split the backup archive into smaller parts. Range 0-10000 MB', 'xcloner-backup-and-restore'),
796
- )
797
- );
798
-
799
- register_setting('xcloner_system_settings_group', 'xcloner_force_tmp_path_site_root');
800
- add_settings_field(
801
- 'xcloner_force_tmp_path_site_root',
802
- __('Force Temporary Path Within XCloner Storage', 'xcloner-backup-and-restore'),
803
- array($this, 'do_form_switch_field'),
804
- 'xcloner_system_settings_page',
805
- 'xcloner_system_settings_group',
806
- array(
807
- 'xcloner_force_tmp_path_site_root',
808
- sprintf(__('Enable this option if you want the XCloner Temporary Path to be within your XCloner Storage Location', 'xcloner-backup-and-restore'), $this->get_table_prefix())
809
- )
810
- );
811
-
812
- register_setting('xcloner_system_settings_group', 'xcloner_disable_email_notification');
813
- add_settings_field(
814
- 'xcloner_disable_email_notification',
815
- __('Disable Email Notifications', 'xcloner-backup-and-restore'),
816
- array($this, 'do_form_switch_field'),
817
- 'xcloner_system_settings_page',
818
- 'xcloner_system_settings_group',
819
- array(
820
- 'xcloner_disable_email_notification',
821
- sprintf(__('Enable this option if you want the XCloner to NOT send email notifications on successful backups', 'xcloner-backup-and-restore'), $this->get_table_prefix())
822
- )
823
- );
824
-
825
- //REGISTERING THE 'CLEANUP SECTION' FIELDS
826
- register_setting('xcloner_cleanup_settings_group', 'xcloner_cleanup_retention_limit_days', array(
827
- $this->xcloner_sanitization,
828
- "sanitize_input_as_int"
829
- ));
830
- add_settings_field(
831
- 'xcloner_cleanup_retention_limit_days',
832
- __('Cleanup by Age (days)', 'xcloner-backup-and-restore'),
833
- array($this, 'do_form_number_field'),
834
- 'xcloner_cleanup_settings_page',
835
- 'xcloner_cleanup_settings_group',
836
- array(
837
- 'xcloner_cleanup_retention_limit_days',
838
- __('Specify the maximum number of days a backup archive can be kept on the server. 0 disables this option', 'xcloner-backup-and-restore')
839
- )
840
- );
841
-
842
- register_setting('xcloner_cleanup_settings_group', 'xcloner_cleanup_retention_limit_archives', array(
843
- $this->xcloner_sanitization,
844
- "sanitize_input_as_int"
845
- ));
846
- add_settings_field(
847
- 'xcloner_cleanup_retention_limit_archives',
848
- __('Cleanup by Quantity', 'xcloner-backup-and-restore'),
849
- array($this, 'do_form_number_field'),
850
- 'xcloner_cleanup_settings_page',
851
- 'xcloner_cleanup_settings_group',
852
- array(
853
- 'xcloner_cleanup_retention_limit_archives',
854
- __('Specify the maximum number of backup archives to keep on the server. 0 disables this option', 'xcloner-backup-and-restore')
855
- )
856
- );
857
-
858
- register_setting('xcloner_cleanup_settings_group', 'xcloner_cleanup_exclude_days', array(
859
- $this->xcloner_sanitization,
860
- "sanitize_input_as_string"
861
- ));
862
- add_settings_field(
863
- 'xcloner_cleanup_exclude_days',
864
- __('Keep Backups Taken On Month Days', 'xcloner-backup-and-restore'),
865
- array($this, 'do_form_text_field'),
866
- 'xcloner_cleanup_settings_page',
867
- 'xcloner_cleanup_settings_group',
868
- array(
869
- 'xcloner_cleanup_exclude_days',
870
- __('Never delete backups taken on the specified days of the month, value used can be comma separated.', 'xcloner-backup-and-restore')
871
- )
872
- );
873
-
874
- register_setting('xcloner_cleanup_settings_group', 'xcloner_cleanup_capacity_limit', array(
875
- $this->xcloner_sanitization,
876
- "sanitize_input_as_int"
877
- ));
878
- add_settings_field(
879
- 'xcloner_cleanup_capacity_limit',
880
- __('Cleanup by Capacity(MB)', 'xcloner-backup-and-restore'),
881
- array($this, 'do_form_number_field'),
882
- 'xcloner_cleanup_settings_page',
883
- 'xcloner_cleanup_settings_group',
884
- array(
885
- 'xcloner_cleanup_capacity_limit',
886
- __('Remove oldest backups if all created backups exceed the configured limit in Megabytes. 0 disables this option', 'xcloner-backup-and-restore')
887
- )
888
- );
889
-
890
- /*
891
- //deprecated setting
892
- register_setting('xcloner_cleanup_settings_group', 'xcloner_cleanup_delete_after_remote_transfer', array(
893
- $this->xcloner_sanitization,
894
- "sanitize_input_as_int"
895
- ));
896
- add_settings_field(
897
- 'xcloner_cleanup_delete_after_remote_transfer',
898
- __('Delete Backup After Remote Storage Transfer', 'xcloner-backup-and-restore'),
899
- array($this, 'do_form_switch_field'),
900
- 'xcloner_cleanup_settings_page',
901
- 'xcloner_cleanup_settings_group',
902
- array(
903
- 'xcloner_cleanup_delete_after_remote_transfer',
904
- __('Remove backup created automatically from local storage after sending the backup to Remote Storage', 'xcloner-backup-and-restore')
905
- )
906
- );
907
- */
908
-
909
- //REGISTERING THE 'CRON SECTION' FIELDS
910
- register_setting('xcloner_cron_settings_group', 'xcloner_cron_frequency');
911
- add_settings_field(
912
- 'xcloner_cron_frequency',
913
- __('Cron frequency', 'xcloner-backup-and-restore'),
914
- array($this, 'do_form_text_field'),
915
- 'xcloner_cron_settings_page',
916
- 'xcloner_cron_settings_group',
917
- array(
918
- 'xcloner_cron_frequency',
919
- __('Cron frequency')
920
- )
921
- );
922
- }
923
-
924
-
925
-
926
-
927
- /**
928
- * callback functions
929
- */
930
-
931
- // section content cb
932
- public function xcloner_settings_section_cb()
933
- {
934
- //echo '<p>WPOrg Section Introduction.</p>';
935
- }
936
-
937
- // text field content cb
938
- public function do_form_text_field($params)
939
- {
940
- if (!isset($params['3'])) {
941
- $params[3] = 0;
942
- }
943
- if (!isset($params['2'])) {
944
- $params[2] = 0;
945
- }
946
-
947
- list($fieldname, $label, $value, $disabled) = $params;
948
-
949
- if (!$value) {
950
- $value = $this->get_xcloner_option($fieldname);
951
- }
952
- // output the field?>
953
- <div class="row">
954
- <?php if ($params[0] !== 'xcloner_cleanup_exclude_days'):?>
955
- <div class="input-field col s10 m10 l8">
956
- <?php else:?>
957
- <div class="input-field col s10 m5 l3">
958
- <?php endif?>
959
- <input class="validate" <?php echo ($disabled) ? "disabled" : "" ?> name="<?php echo $fieldname ?>"
960
- id="<?php echo $fieldname ?>" type="text" class="validate"
961
- value="<?php echo isset($value) ? esc_attr($value) : ''; ?>">
962
- </div>
963
- <div class="col s2 m2 ">
964
- <a class="btn-floating tooltipped btn-small" data-position="center" data-delay="50"
965
- data-tooltip="<?php echo $label ?>" data-tooltip-id=""><i class="material-icons">help_outline</i></a>
966
- </div>
967
- </div>
968
-
969
-
970
- <?php
971
- }
972
-
973
- /**
974
- * Password field UI
975
- *
976
- * @param [type] $params
977
- * @return void
978
- */
979
- public function do_form_password_field($params)
980
- {
981
- if (!isset($params['3'])) {
982
- $params[3] = 0;
983
- }
984
- if (!isset($params['2'])) {
985
- $params[2] = 0;
986
- }
987
-
988
- list($fieldname, $label, $value, $disabled) = $params;
989
-
990
- if (!$value) {
991
- $value = $this->get_xcloner_option($fieldname);
992
- }
993
- // output the field?>
994
- <div class="row">
995
- <div class="input-field col s10 m10 l8">
996
- <input class="validate" <?php echo ($disabled) ? "disabled" : "" ?> name="<?php echo $fieldname ?>"
997
- id="<?php echo $fieldname ?>" type="password" class="validate"
998
- value="<?php echo isset($value) ? esc_attr($value) : ''; ?>">
999
- </div>
1000
- <div class="col s2 m2 ">
1001
- <a class="btn-floating tooltipped btn-small" data-position="left" data-delay="50"
1002
- data-tooltip="<?php echo $label ?>" data-tooltip-id=""><i class="material-icons">help_outline</i></a>
1003
- </div>
1004
- </div>
1005
-
1006
-
1007
- <?php
1008
- }
1009
-
1010
- // textarea field content cb
1011
- public function do_form_textarea_field($params)
1012
- {
1013
- if (!isset($params['3'])) {
1014
- $params[3] = 0;
1015
- }
1016
- if (!isset($params['2'])) {
1017
- $params[2] = 0;
1018
- }
1019
-
1020
- list($fieldname, $label, $value, $disabled) = $params;
1021
-
1022
- if (!$value) {
1023
- $value = $this->get_xcloner_option($fieldname);
1024
- }
1025
- // output the field?>
1026
- <div class="row">
1027
- <div class="input-field col s10 m10 l8">
1028
- <textarea class="validate" <?php echo ($disabled) ? "disabled" : "" ?> name="<?php echo $fieldname ?>"
1029
- id="<?php echo $fieldname ?>" type="text" class="validate"
1030
- value=""><?php echo isset($value) ? esc_attr($value) : ''; ?></textarea>
1031
- </div>
1032
- <div class="col s2 m2 ">
1033
- <a class="btn-floating tooltipped btn-small" data-position="center" data-html="true" data-delay="50"
1034
- data-tooltip="<?php echo $label ?>" data-tooltip-id=""><i class="material-icons">help_outline</i></a>
1035
- </div>
1036
- <div class="col s12">
1037
- <ul class="xcloner_regex_exclude_limit">
1038
- <li>Exclude all except .php file: <span
1039
- class="regex_pattern"><?php echo htmlentities('(.*)\.(.+)$(?<!(php))') ?></span></li>
1040
- <li>Exclude all except .php and .txt: <span
1041
- class="regex_pattern"> <?php echo htmlentities('(.*)\.(.+)$(?<!(php|txt))') ?></span>
1042
- </li>
1043
- <li>Exclude all .avi files: <span
1044
- class="regex_pattern"> <?php echo htmlentities('(.*)\.(.+)$(?<=(avi))') ?></span></li>
1045
- <li>Exclude all .jpg,.gif and .png files: <span
1046
- class="regex_pattern"> <?php echo htmlentities('(.*)\.(.+)$(?<=(gif|png|jpg))') ?></span>
1047
- </li>
1048
- <li>Exclude all .svn and .git: <span
1049
- class="regex_pattern"> <?php echo htmlentities('(.*)\.(svn|git)(.*)$') ?></span></li>
1050
- <li>Exclude root directory /test: <span
1051
- class="regex_pattern"> <?php echo htmlentities('\/test(.*)$') ?></span> or <span
1052
- class="regex_pattern"> <?php echo htmlentities('test(.*)$') ?></span></li>
1053
- <li>Exclude the wp-admin folder: <span
1054
- class="regex_pattern"> <?php echo htmlentities('(\/wp-admin)(.*)$') ?></span></li>
1055
- <li>Exclude the wp-content/uploads folder: <span
1056
- class="regex_pattern"> <?php echo htmlentities('(\/wp-content\/uploads)(.*)$') ?></span>
1057
- </li>
1058
- <li>Exclude the wp-admin, wp-includes and wp-config.php: <span
1059
- class="regex_pattern"> <?php echo htmlentities('\/(wp-admin|wp-includes|wp-config.php)(.*)$') ?></span>
1060
- </li>
1061
- <li>Exclude wp-content/updraft and wp/content/uploads/wp_all_backup folder :<span
1062
- class="regex_pattern">\/(wp-content\/updraft|\/wp-content\/uploads\/wp_all_backup)(.*)$</span>
1063
- </li>
1064
- <li>Exclude all cache folders from wp-content/ and it's subdirectories: <span
1065
- class="regex_pattern"> <?php echo htmlentities('\/wp-content(.*)\/cache($|\/)(.*)') ?></span>
1066
- </li>
1067
- <li>Exclude wp-content/cache/ folder: <span
1068
- class="regex_pattern"> <?php echo htmlentities('\/wp-content\/cache(.*)') ?></span>
1069
- </li>
1070
- <li>Exclude all error_log files: <span
1071
- class="regex_pattern"> <?php echo htmlentities('(.*)error_log$') ?></span></li>
1072
- </ul>
1073
- </div>
1074
- </div>
1075
-
1076
-
1077
- <?php
1078
- }
1079
-
1080
- // number field content cb
1081
- public function do_form_number_field($params)
1082
- {
1083
- if (!isset($params['3'])) {
1084
- $params[3] = 0;
1085
- }
1086
- if (!isset($params['2'])) {
1087
- $params[2] = 0;
1088
- }
1089
-
1090
- list($fieldname, $label, $value, $disabled) = $params;
1091
-
1092
- if (!$value) {
1093
- $value = $this->get_xcloner_option($fieldname);
1094
- }
1095
- // output the field?>
1096
- <div class="row">
1097
- <div class="input-field col s10 m5 l3">
1098
- <input class="validate" <?php echo ($disabled) ? "disabled" : "" ?> name="<?php echo $fieldname ?>"
1099
- id="<?php echo $fieldname ?>" type="number" class="validate"
1100
- value="<?php echo isset($value) ? esc_attr($value) : ''; ?>">
1101
- </div>
1102
- <div class="col s2 m2 ">
1103
- <a class="btn-floating tooltipped btn-small" data-html="true" data-position="center" data-delay="50"
1104
- data-tooltip="<?php echo $label ?>" data-tooltip-id=""><i class="material-icons">help_outline</i></a>
1105
- </div>
1106
- </div>
1107
-
1108
-
1109
- <?php
1110
- }
1111
-
1112
- public function do_form_range_field($params)
1113
- {
1114
- if (!isset($params['4'])) {
1115
- $params[4] = 0;
1116
- }
1117
-
1118
- list($fieldname, $label, $range_start, $range_end, $disabled) = $params;
1119
- $value = $this->get_xcloner_option($fieldname); ?>
1120
- <div class="row">
1121
- <div class="input-field col s10 m10 l8">
1122
- <p class="range-field">
1123
- <input <?php echo ($disabled) ? "disabled" : "" ?> type="range" name="<?php echo $fieldname ?>"
1124
- id="<?php echo $fieldname ?>"
1125
- min="<?php echo $range_start ?>"
1126
- max="<?php echo $range_end ?>"
1127
- value="<?php echo isset($value) ? esc_attr($value) : ''; ?>"/>
1128
- </p>
1129
- </div>
1130
- <div class="col s2 m2 ">
1131
- <a class="btn-floating tooltipped btn-small" data-html="true" data-position="center" data-delay="50"
1132
- data-tooltip="<?php echo $label ?>" data-tooltip-id=""><i class="material-icons">help_outline</i></a>
1133
- </div>
1134
- </div>
1135
- <?php
1136
- }
1137
-
1138
-
1139
- public function do_form_switch_field($params)
1140
- {
1141
- if (!isset($params['2'])) {
1142
- $params[2] = 0;
1143
- }
1144
- list($fieldname, $label, $disabled) = $params;
1145
- $value = $this->get_xcloner_option($fieldname); ?>
1146
- <div class="row">
1147
- <div class="input-field col s10 m5 l3">
1148
- <div class="switch">
1149
- <label>
1150
- Off
1151
- <input <?php echo ($disabled) ? "disabled" : "" ?> type="checkbox"
1152
- name="<?php echo $fieldname ?>"
1153
- id="<?php echo $fieldname ?>"
1154
- value="1" <?php echo ($value) ? 'checked="checked"' : ''; ?>
1155
- ">
1156
- <span class="lever"></span>
1157
- On
1158
- </label>
1159
- </div>
1160
- </div>
1161
- <div class="col s2 m2">
1162
- <a class="btn-floating tooltipped btn-small" data-position="center" data-delay="50"
1163
- data-tooltip="<?php echo $label ?>" data-tooltip-id=""><i class="material-icons">help_outline</i></a>
1164
- </div>
1165
- </div>
1166
- <?php
1167
- }
1168
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner-standalone.php DELETED
@@ -1,105 +0,0 @@
1
- <?php
2
-
3
- define('XCLONER_STANDALONE_MODE', true);
4
-
5
- require_once(__DIR__.'/../vendor/autoload.php');
6
-
7
- use Monolog\Logger;
8
- use Monolog\Handler\StreamHandler;
9
- use Monolog\Handler\RotatingFileHandler;
10
-
11
- include_once(__DIR__ ."/../lib/mock_wp_functions.php");
12
- require_once(__DIR__ . '/../includes/class-xcloner.php');
13
-
14
-
15
- class Xcloner_Standalone extends Xcloner
16
- {
17
- public function __construct($json_config = "")
18
- {
19
- if (WP_DEBUG && WP_DEBUG_DISPLAY) {
20
- $this->log_php_errors();
21
- }
22
-
23
- $this->load_dependencies();
24
-
25
- $this->define_plugin_settings($json_config);
26
-
27
- if(!isset($_POST['hash']) || !$_POST['hash']){
28
- $_POST['hash'] = "";
29
- }
30
- $this->xcloner_settings = new XCloner_Settings($this, $_POST['hash'], $json_config);
31
-
32
-
33
- if( !$this->xcloner_settings->get_hash(true) ){
34
- $this->xcloner_settings->generate_new_hash();
35
- }
36
-
37
-
38
- $this->define_plugin_settings();
39
-
40
- $this->xcloner_logger = new XCloner_Logger($this, "xcloner_standalone");
41
-
42
- if (WP_DEBUG && WP_DEBUG_DISPLAY) {
43
- $this->xcloner_logger->pushHandler(new StreamHandler('php://stdout', Logger::INFO));
44
- }
45
-
46
- $this->xcloner_filesystem = new Xcloner_File_System($this);
47
- $this->archive_system = new Xcloner_Archive($this);
48
- $this->xcloner_database = new Xcloner_Database($this);
49
- $this->xcloner_scheduler = new Xcloner_Scheduler($this);
50
- $this->xcloner_remote_storage = new Xcloner_Remote_Storage($this);
51
- $this->xcloner_file_transfer = new Xcloner_File_Transfer($this);
52
- $this->xcloner_encryption = new Xcloner_Encryption($this);
53
- $this->xcloner_sanitization = new Xcloner_Sanitization();
54
-
55
- //$this->start();
56
- }
57
-
58
- /**
59
- * Start backup process trigger method
60
- *
61
- * @return void
62
- */
63
- public function start($profile_id)
64
- {
65
- $profile_config = ($this->xcloner_settings->get_xcloner_option('profile'));
66
-
67
- $data['params'] = "";
68
- $data['backup_params'] = $profile_config->backup_params;
69
- $data['table_params'] = json_encode($profile_config->database);
70
- $data['excluded_files'] = json_encode($profile_config->excluded_files);
71
- if (isset($profile_id) && $profile_id) {
72
- $data['id'] = $profile_id;
73
- }
74
-
75
- //print_r($data);exit;
76
-
77
- return $this->xcloner_scheduler->xcloner_scheduler_callback($data['id'], $data, $this);
78
- }
79
-
80
- /**
81
- * Overwrite parent __call method
82
- *
83
- * @param [type] $property
84
- * @param [type] $args
85
- * @return void
86
- */
87
- public function __call($property, $args)
88
- {
89
- $property = str_replace("get_", "", $property);
90
-
91
- if (property_exists($this, $property)) {
92
- return $this->$property;
93
- }
94
- }
95
-
96
- /**
97
- * Get Xcloner Main Class Container
98
- *
99
- * @return void
100
- */
101
- private function get_xcloner_container()
102
- {
103
- return $this;
104
- }
105
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/class-xcloner.php CHANGED
@@ -1,4 +1,18 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  /**
3
  * XCloner - Backup and Restore backup plugin for Wordpress
4
  *
@@ -41,7 +55,7 @@
41
  * @author Liuta Ovidiu <info@thinkovi.com>
42
  * @link https://watchful.net
43
  */
44
- class Xcloner
45
  {
46
 
47
  /**
@@ -75,6 +89,7 @@ class Xcloner
75
  protected $version;
76
 
77
  private $xcloner_settings;
 
78
  private $xcloner_logger;
79
  private $xcloner_sanitization;
80
  private $xcloner_requirements;
@@ -100,12 +115,12 @@ class Xcloner
100
  $this->log_php_errors();
101
 
102
  $this->plugin_name = 'xcloner';
103
- $this->version = '4.2.0';
104
 
105
  $this->load_dependencies();
106
  $this->set_locale();
107
  $this->define_admin_hooks();
108
- $this->define_public_hooks();
109
 
110
  $this->define_admin_menu();
111
  $this->define_plugin_settings();
@@ -114,8 +129,7 @@ class Xcloner
114
  $this->define_cron_hooks();
115
  }
116
 
117
- public function log_php_errors()
118
- {
119
  register_shutdown_function(array($this, 'exception_handler'));
120
  }
121
 
@@ -164,9 +178,9 @@ class Xcloner
164
  if (!@mkdir($backup_storage_path)) {
165
  $status = "error";
166
  $message = sprintf(
167
- __("Unable to create the Backup Storage Location Folder %s . Please fix this before starting the backup process."),
168
- $backup_storage_path
169
- );
170
  $this->trigger_message($message, $status, $backup_storage_path);
171
  return;
172
  }
@@ -175,9 +189,9 @@ class Xcloner
175
  if (!is_writable($backup_storage_path)) {
176
  $status = "error";
177
  $message = sprintf(
178
- __("Unable to write to the Backup Storage Location Folder %s . Please fix this before starting the backup process."),
179
- $backup_storage_path
180
- );
181
  $this->trigger_message($message, $status, $backup_storage_path);
182
 
183
  return;
@@ -187,12 +201,12 @@ class Xcloner
187
  }
188
 
189
  public function trigger_message($message, $status = "error", $message_param1 = "", $message_param2 = "", $message_param3 = "")
190
- {
191
  $message = sprintf(__($message), $message_param1, $message_param2, $message_param3);
192
  add_action('xcloner_admin_notices', array($this, "trigger_message_notice"), 10, 2);
193
  do_action('xcloner_admin_notices', $message, $status);
194
 
195
- if (defined("XCLONER_STANDALONE_MODE") && XCLONER_STANDALONE_MODE) {
196
  throw new Error($message);
197
  }
198
  }
@@ -223,92 +237,11 @@ class Xcloner
223
  * @access private
224
  */
225
  public function load_dependencies()
226
- {
227
-
228
- /**
229
- * The class responsible for orchestrating the actions and filters of the
230
- * core plugin.
231
- */
232
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-loader.php';
233
-
234
- /**
235
- * The class responsible for defining internationalization functionality
236
- * of the plugin.
237
- */
238
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-i18n.php';
239
-
240
- /**
241
- * The class responsible for defining all actions that occur in the admin area.
242
- */
243
- require_once plugin_dir_path(dirname(__FILE__)).'admin/class-xcloner-admin.php';
244
-
245
- /**
246
- * The class responsible for debugging XCloner.
247
- */
248
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-logger.php';
249
-
250
- /**
251
- * The class responsible for defining the admin settings area.
252
- */
253
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-settings.php';
254
-
255
- /**
256
- * The class responsible for defining the Remote Storage settings area.
257
- */
258
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-remote-storage.php';
259
-
260
- /**
261
- * The class responsible for implementing the database backup methods.
262
- */
263
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-database.php';
264
-
265
- /**
266
- * The class responsible for sanitization of users input.
267
- */
268
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-sanitization.php';
269
-
270
- /**
271
- * The class responsible for XCloner system requirements validation.
272
- */
273
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-requirements.php';
274
-
275
- /**
276
- * The class responsible for XCloner backup archive creation.
277
- */
278
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-archive.php';
279
-
280
- /**
281
- * The class responsible for XCloner API requests.
282
- */
283
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-api.php';
284
-
285
- /**
286
- * The class responsible for the XCloner File System methods.
287
- */
288
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-file-system.php';
289
-
290
- /**
291
- * The class responsible for the XCloner File Transfer methods.
292
- */
293
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-file-transfer.php';
294
-
295
- /**
296
- * The class responsible for the XCloner Scheduler methods.
297
- */
298
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-scheduler.php';
299
-
300
- /**
301
- * The class responsible for the XCloner Encryption methods.
302
- */
303
- require_once plugin_dir_path(dirname(__FILE__)).'includes/class-xcloner-encryption.php';
304
-
305
- /**
306
- * The class responsible for defining all actions that occur in the public-facing
307
- * side of the site.
308
- */
309
- require_once plugin_dir_path(dirname(__FILE__)).'public/class-xcloner-public.php';
310
 
311
  $this->loader = new Xcloner_Loader($this);
 
 
312
  }
313
 
314
  /**
@@ -339,7 +272,7 @@ class Xcloner
339
  */
340
  private function define_admin_hooks()
341
  {
342
- $plugin_admin = new Xcloner_Admin($this);
343
  $this->plugin_admin = $plugin_admin;
344
 
345
  $this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_styles');
@@ -364,7 +297,7 @@ class Xcloner
364
  /**
365
  * register wporg_settings_init to the admin_init action hook
366
  */
367
- $this->xcloner_settings = new XCloner_Settings($this);
368
 
369
  if (defined('DOING_CRON') || isset($_POST['hash'])) {
370
  if (defined('DOING_CRON') || $_POST['hash'] == "generate_hash") {
@@ -501,7 +434,7 @@ class Xcloner
501
  */
502
  private function define_public_hooks()
503
  {
504
- $plugin_public = new Xcloner_Public($this);
505
 
506
  $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_styles');
507
  $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts');
@@ -509,7 +442,7 @@ class Xcloner
509
 
510
  public function exception_handler()
511
  {
512
- $logger = new XCloner_Logger($this, "php_system");
513
  $error = error_get_last();
514
 
515
  if ($error['type'] and $error['type'] === E_ERROR and $logger) {
@@ -543,21 +476,20 @@ class Xcloner
543
  //adding the pre-update hook
544
 
545
  if (is_admin() || defined('DOING_CRON')) {
546
- $this->xcloner_logger = new XCloner_Logger($this, "xcloner_api");
547
  $this->xcloner_filesystem = new Xcloner_File_System($this);
548
 
549
  //$this->xcloner_filesystem->set_diff_timestamp_start (strtotime("-15 days"));
550
-
551
  $this->archive_system = new Xcloner_Archive($this);
552
  $this->xcloner_database = new Xcloner_Database($this);
553
  $this->xcloner_scheduler = new Xcloner_Scheduler($this);
554
  $this->xcloner_remote_storage = new Xcloner_Remote_Storage($this);
555
  $this->xcloner_file_transfer = new Xcloner_File_Transfer($this);
556
  $this->xcloner_encryption = new Xcloner_Encryption($this);
557
-
558
  $xcloner_api = new Xcloner_Api($this);
 
559
 
560
-
561
  $this->loader->add_action('wp_ajax_get_database_tables_action', $xcloner_api, 'get_database_tables_action');
562
  $this->loader->add_action('wp_ajax_get_file_system_action', $xcloner_api, 'get_file_system_action');
563
  $this->loader->add_action('wp_ajax_scan_filesystem', $xcloner_api, 'scan_filesystem');
@@ -575,7 +507,7 @@ class Xcloner
575
  $this->loader->add_action('wp_ajax_restore_upload_backup', $xcloner_api, 'restore_upload_backup');
576
  $this->loader->add_action('wp_ajax_download_restore_script', $xcloner_api, 'download_restore_script');
577
  $this->loader->add_action('wp_ajax_copy_backup_remote_to_local', $xcloner_api, 'copy_backup_remote_to_local');
578
- $this->loader->add_action('wp_ajax_restore_backup', $xcloner_api, 'restore_backup');
579
  $this->loader->add_action('wp_ajax_backup_encryption', $xcloner_api, 'backup_encryption');
580
  $this->loader->add_action('wp_ajax_backup_decryption', $xcloner_api, 'backup_decryption');
581
  $this->loader->add_action('wp_ajax_get_manage_backups_list', $xcloner_api, 'get_manage_backups_list');
@@ -694,8 +626,8 @@ class Xcloner
694
  );
695
  add_submenu_page(
696
  'xcloner_init_page',
697
- __('Scheduled Backups', 'xcloner-backup-and-restore'),
698
- __('Scheduled Backups', 'xcloner-backup-and-restore'),
699
  'manage_options',
700
  'xcloner_scheduled_backups_page',
701
  array($this, 'xcloner_display')
@@ -768,9 +700,22 @@ class Xcloner
768
 
769
  public function display($page)
770
  {
771
- $plugin_admin = new Xcloner_Admin($this);
772
  $this->plugin_admin = $plugin_admin;
773
 
774
  call_user_func_array(array($this->plugin_admin, $page), array());
775
  }
776
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ use watchfulli\XClonerCore\Xcloner_Loader;
3
+ use watchfulli\XClonerCore\Xcloner_i18n;
4
+ use watchfulli\XClonerCore\Xcloner_Sanitization;
5
+ use watchfulli\XClonerCore\Xcloner_Scheduler;
6
+ use watchfulli\XClonerCore\Xcloner_Settings;
7
+ use watchfulli\XClonerCore\Xcloner_File_System;
8
+ use watchfulli\XClonerCore\Xcloner_File_Transfer;
9
+ use watchfulli\XClonerCore\Xcloner_Encryption;
10
+ use watchfulli\XClonerCore\Xcloner_Database;
11
+ use watchfulli\XClonerCore\Xcloner_Remote_Storage;
12
+ use watchfulli\XClonerCore\Xcloner_Requirements;
13
+ use watchfulli\XClonerCore\Xcloner_Logger;
14
+ use watchfulli\XClonerCore\Xcloner_Archive;
15
+ use watchfulli\XClonerCore\Xcloner_Api;
16
  /**
17
  * XCloner - Backup and Restore backup plugin for Wordpress
18
  *
55
  * @author Liuta Ovidiu <info@thinkovi.com>
56
  * @link https://watchful.net
57
  */
58
+ class Xcloner extends watchfulli\XClonerCore\Xcloner
59
  {
60
 
61
  /**
89
  protected $version;
90
 
91
  private $xcloner_settings;
92
+ private $xcloner_api;
93
  private $xcloner_logger;
94
  private $xcloner_sanitization;
95
  private $xcloner_requirements;
115
  $this->log_php_errors();
116
 
117
  $this->plugin_name = 'xcloner';
118
+ $this->version = '4.2.1';
119
 
120
  $this->load_dependencies();
121
  $this->set_locale();
122
  $this->define_admin_hooks();
123
+ //$this->define_public_hooks();
124
 
125
  $this->define_admin_menu();
126
  $this->define_plugin_settings();
129
  $this->define_cron_hooks();
130
  }
131
 
132
+ public function log_php_errors(){
 
133
  register_shutdown_function(array($this, 'exception_handler'));
134
  }
135
 
178
  if (!@mkdir($backup_storage_path)) {
179
  $status = "error";
180
  $message = sprintf(
181
+ __("Unable to create the Backup Storage Location Folder %s . Please fix this before starting the backup process."),
182
+ $backup_storage_path
183
+ );
184
  $this->trigger_message($message, $status, $backup_storage_path);
185
  return;
186
  }
189
  if (!is_writable($backup_storage_path)) {
190
  $status = "error";
191
  $message = sprintf(
192
+ __("Unable to write to the Backup Storage Location Folder %s . Please fix this before starting the backup process."),
193
+ $backup_storage_path
194
+ );
195
  $this->trigger_message($message, $status, $backup_storage_path);
196
 
197
  return;
201
  }
202
 
203
  public function trigger_message($message, $status = "error", $message_param1 = "", $message_param2 = "", $message_param3 = "")
204
+ {
205
  $message = sprintf(__($message), $message_param1, $message_param2, $message_param3);
206
  add_action('xcloner_admin_notices', array($this, "trigger_message_notice"), 10, 2);
207
  do_action('xcloner_admin_notices', $message, $status);
208
 
209
+ if (defined(XCLONER_STANDALONE_MODE) && XCLONER_STANDALONE_MODE) {
210
  throw new Error($message);
211
  }
212
  }
237
  * @access private
238
  */
239
  public function load_dependencies()
240
+ {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
241
 
242
  $this->loader = new Xcloner_Loader($this);
243
+
244
+ return;
245
  }
246
 
247
  /**
272
  */
273
  private function define_admin_hooks()
274
  {
275
+ $plugin_admin = new \Xcloner_Admin($this);
276
  $this->plugin_admin = $plugin_admin;
277
 
278
  $this->loader->add_action('admin_enqueue_scripts', $plugin_admin, 'enqueue_styles');
297
  /**
298
  * register wporg_settings_init to the admin_init action hook
299
  */
300
+ $this->xcloner_settings = new Xcloner_Settings($this);
301
 
302
  if (defined('DOING_CRON') || isset($_POST['hash'])) {
303
  if (defined('DOING_CRON') || $_POST['hash'] == "generate_hash") {
434
  */
435
  private function define_public_hooks()
436
  {
437
+ $plugin_public = new \Xcloner_Public($this);
438
 
439
  $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_styles');
440
  $this->loader->add_action('wp_enqueue_scripts', $plugin_public, 'enqueue_scripts');
442
 
443
  public function exception_handler()
444
  {
445
+ $logger = new Xcloner_Logger($this, "php_system");
446
  $error = error_get_last();
447
 
448
  if ($error['type'] and $error['type'] === E_ERROR and $logger) {
476
  //adding the pre-update hook
477
 
478
  if (is_admin() || defined('DOING_CRON')) {
479
+ $this->xcloner_logger = new Xcloner_Logger($this, "xcloner_api");
480
  $this->xcloner_filesystem = new Xcloner_File_System($this);
481
 
482
  //$this->xcloner_filesystem->set_diff_timestamp_start (strtotime("-15 days"));
 
483
  $this->archive_system = new Xcloner_Archive($this);
484
  $this->xcloner_database = new Xcloner_Database($this);
485
  $this->xcloner_scheduler = new Xcloner_Scheduler($this);
486
  $this->xcloner_remote_storage = new Xcloner_Remote_Storage($this);
487
  $this->xcloner_file_transfer = new Xcloner_File_Transfer($this);
488
  $this->xcloner_encryption = new Xcloner_Encryption($this);
489
+
490
  $xcloner_api = new Xcloner_Api($this);
491
+ $this->xcloner_api = $xcloner_api;
492
 
 
493
  $this->loader->add_action('wp_ajax_get_database_tables_action', $xcloner_api, 'get_database_tables_action');
494
  $this->loader->add_action('wp_ajax_get_file_system_action', $xcloner_api, 'get_file_system_action');
495
  $this->loader->add_action('wp_ajax_scan_filesystem', $xcloner_api, 'scan_filesystem');
507
  $this->loader->add_action('wp_ajax_restore_upload_backup', $xcloner_api, 'restore_upload_backup');
508
  $this->loader->add_action('wp_ajax_download_restore_script', $xcloner_api, 'download_restore_script');
509
  $this->loader->add_action('wp_ajax_copy_backup_remote_to_local', $xcloner_api, 'copy_backup_remote_to_local');
510
+ $this->loader->add_action('wp_ajax_restore_backup', $this, 'restore_backup');
511
  $this->loader->add_action('wp_ajax_backup_encryption', $xcloner_api, 'backup_encryption');
512
  $this->loader->add_action('wp_ajax_backup_decryption', $xcloner_api, 'backup_decryption');
513
  $this->loader->add_action('wp_ajax_get_manage_backups_list', $xcloner_api, 'get_manage_backups_list');
626
  );
627
  add_submenu_page(
628
  'xcloner_init_page',
629
+ __('Schedules & Profiles', 'xcloner-backup-and-restore'),
630
+ __('Schedules & Profiles', 'xcloner-backup-and-restore'),
631
  'manage_options',
632
  'xcloner_scheduled_backups_page',
633
  array($this, 'xcloner_display')
700
 
701
  public function display($page)
702
  {
703
+ $plugin_admin = new \Xcloner_Admin($this);
704
  $this->plugin_admin = $plugin_admin;
705
 
706
  call_user_func_array(array($this->plugin_admin, $page), array());
707
  }
708
+
709
+ /**
710
+ * Restore backup api call
711
+ */
712
+ public function restore_backup()
713
+ {
714
+ $this->check_access();
715
+
716
+ define("XCLONER_PLUGIN_ACCESS", 1);
717
+ include_once(dirname(__DIR__).DS."restore".DS."xcloner_restore.php");
718
+
719
+ return;
720
+ }
721
+ }
includes/index.php DELETED
@@ -1 +0,0 @@
1
- <?php // Silence is golden
 
lib/mock_wp_functions.php DELETED
@@ -1,459 +0,0 @@
1
- <?php
2
- $wp_settings_errors = "";
3
-
4
- //NONCE_KEY
5
- //NONCE_SALT
6
- //ABSPATH
7
-
8
- if (!defined('WP_DEBUG')) {
9
- define('WP_DEBUG', false);
10
- }
11
-
12
- if (!defined('WPINC')) {
13
- define('WPINC', false);
14
- }
15
-
16
- if (!defined('DOING_CRON')) {
17
- define('DOING_CRON', false);
18
- }
19
-
20
- if (!defined('WP_DEBUG_DISPLAY')) {
21
- define('WP_DEBUG_DISPLAY', false);
22
- }
23
-
24
- if (!defined('WP_CONTENT_DIR')) {
25
- define('WP_CONTENT_DIR', __DIR__);
26
- }
27
-
28
- if (!defined('DS')) {
29
- define('DS', DIRECTORY_SEPARATOR);
30
- }
31
-
32
- if (!defined('MINUTE_IN_SECONDS')) {
33
- define('MINUTE_IN_SECONDS', 60);
34
- }
35
-
36
- if (!defined('MINUTE_IN_SECONDS')) {
37
- define('HOUR_IN_SECONDS', 60 * MINUTE_IN_SECONDS);
38
- }
39
-
40
- if (!defined('MINUTE_IN_SECONDS')) {
41
- define('DAY_IN_SECONDS', 24 * HOUR_IN_SECONDS);
42
- }
43
-
44
- if (!defined('MINUTE_IN_SECONDS')) {
45
- define('WEEK_IN_SECONDS', 7 * DAY_IN_SECONDS);
46
- }
47
-
48
- if (!defined('MINUTE_IN_SECONDS')) {
49
- define('MONTH_IN_SECONDS', 30 * DAY_IN_SECONDS);
50
- }
51
-
52
- if (!defined('MINUTE_IN_SECONDS')) {
53
- define('YEAR_IN_SECONDS', 365 * DAY_IN_SECONDS);
54
- }
55
-
56
- if (!defined('MINUTE_IN_SECONDS')) {
57
- define('WPINC', true);
58
- }
59
-
60
- if(!class_exists('WP_Error')) {
61
- require_once(__DIR__ . '/class-wp-error.php');
62
- }
63
-
64
- if (!function_exists('is_wp_error')) {
65
- function is_wp_error($thing)
66
- {
67
- return ($thing instanceof WP_Error);
68
- }
69
- }
70
-
71
- if (!function_exists('get_site_url')) {
72
- function get_site_url()
73
- {
74
- return __DIR__;
75
- }
76
- }
77
-
78
- if (!function_exists('admin_url')) {
79
- function admin_url()
80
- {
81
- return __DIR__;
82
- }
83
- }
84
-
85
- /**
86
- * Sanitize plugin dir path
87
- *
88
- * @param [type] $path
89
- * @return void
90
- */
91
- if (!function_exists('plugin_dir_path')) {
92
- function plugin_dir_path($path)
93
- {
94
- return dirname($path).DS;
95
- }
96
- }
97
-
98
- /**
99
- * Undocumented function
100
- *
101
- * @param [type] $setting
102
- * @param [type] $code
103
- * @param [type] $message
104
- * @param string $type
105
- * @return void
106
- */
107
- if (!function_exists('add_settings_error')) {
108
- function add_settings_error($setting, $code, $message, $type = 'error')
109
- {
110
- global $wp_settings_errors;
111
-
112
- $wp_settings_errors[] = array(
113
- 'setting' => $setting,
114
- 'code' => $code,
115
- 'message' => $message,
116
- 'type' => $type,
117
- );
118
- }
119
- }
120
-
121
- if (!function_exists('has_filter')) {
122
- function has_filter($tag, $function_to_check = false)
123
- {
124
- return false;
125
- }
126
- }
127
-
128
- if (!function_exists('mbstring_binary_safe_encoding')) {
129
- function mbstring_binary_safe_encoding($reset = false)
130
- {
131
- static $encodings = array();
132
- static $overloaded = null;
133
-
134
- if (is_null($overloaded)) {
135
- $overloaded = function_exists('mb_internal_encoding') && (ini_get('mbstring.func_overload') & 2);
136
- }
137
-
138
- if (false === $overloaded) {
139
- return;
140
- }
141
-
142
- if (! $reset) {
143
- $encoding = mb_internal_encoding();
144
- array_push($encodings, $encoding);
145
- mb_internal_encoding('ISO-8859-1');
146
- }
147
-
148
- if ($reset && $encodings) {
149
- $encoding = array_pop($encodings);
150
- mb_internal_encoding($encoding);
151
- }
152
- }
153
- }
154
-
155
- if (!function_exists('reset_mbstring_encoding')) {
156
- function reset_mbstring_encoding()
157
- {
158
- mbstring_binary_safe_encoding(true);
159
- }
160
- }
161
-
162
- /**
163
- * Get option
164
- *
165
- * @param [type] $option_name
166
- * @return void
167
- */
168
- if (!function_exists('get_option')) {
169
- function get_option($option_name = "")
170
- {
171
- if (!$option_name) {
172
- return $GLOBALS['xcloner_settings'];
173
- }
174
-
175
- if(!isset($GLOBALS['xcloner_settings'][$option_name])){
176
- return null;
177
- }
178
-
179
- return $GLOBALS['xcloner_settings'][$option_name];
180
- }
181
- }
182
-
183
- /**
184
- * Add option
185
- *
186
- * @param [type] $option_name
187
- * @param string $value
188
- * @return void
189
- */
190
- if (!function_exists('add_option')) {
191
- function add_option($option_name, $value="")
192
- {
193
- return $GLOBALS['xcloner_settings'][$option_name] = $value;
194
- }
195
- }
196
-
197
- /**
198
- * Update option or create if it doesn't exist
199
- *
200
- * @param [type] $option_name
201
- * @param string $value
202
- * @return void
203
- */
204
- if (!function_exists('update_option')) {
205
- function update_option($option_name, $value="")
206
- {
207
- return add_option($option_name, $value);
208
- }
209
- }
210
-
211
- /**
212
- * Die script
213
- */
214
- if (!function_exists('wp_die')) {
215
- function wp_die($msg)
216
- {
217
- die($msg);
218
- }
219
- }
220
-
221
- /**
222
- *
223
- */
224
- if (!function_exists('dbDelta')) {
225
- function dbDelta($sql)
226
- {
227
- }
228
- }
229
-
230
- /**
231
- * Custom Watchfull backend check
232
- */
233
- if (!function_exists('is_admin')) {
234
- function is_admin()
235
- {
236
- return true;
237
- }
238
- }
239
-
240
- /**
241
- *
242
- */
243
- if (!function_exists('register_activation_hook')) {
244
- function register_activation_hook($path, $hook)
245
- {
246
- }
247
- }
248
-
249
- /**
250
- *
251
- */
252
- if (!function_exists('register_deactivation_hook')) {
253
- function register_deactivation_hook($path, $hook)
254
- {
255
- }
256
- }
257
-
258
- /**
259
- *
260
- */
261
- if (!function_exists('deactivate_plugins')) {
262
- function deactivate_plugins($path)
263
- {
264
- }
265
- }
266
-
267
- /**
268
- *
269
- */
270
- if (!function_exists('wp_deregister_script')) {
271
- function wp_deregister_script($path)
272
- {
273
- }
274
- }
275
-
276
-
277
- /**
278
- *
279
- */
280
- if (!function_exists('add_action')) {
281
- function add_action($hook, $callback)
282
- {
283
- if(substr($hook, 0, 8) == "wp_ajax_") {
284
- $request = "wp_ajax_".$_REQUEST['action'];
285
- if($request === $hook){
286
- //print_r($callback[1]);
287
- //exit;
288
- return call_user_func($callback);
289
- }
290
- }
291
- }
292
- }
293
-
294
- /**
295
- *
296
- */
297
- if (!function_exists('do_action')) {
298
- function do_action($hook)
299
- {
300
-
301
- }
302
- }
303
-
304
- /**
305
- *
306
- */
307
- if (!function_exists('add_filter')) {
308
- function add_filter($hook)
309
- {
310
- //echo $hook;
311
- }
312
- }
313
-
314
- /**
315
- *
316
- */
317
- if (!function_exists('apply_filters')) {
318
- function apply_filters($tag, $value)
319
- {
320
- return $value;
321
- }
322
- }
323
-
324
- /**
325
- *
326
- */
327
- if (!function_exists('do_filter')) {
328
- function do_filter2($hook)
329
- {
330
- }
331
- }
332
-
333
- /**
334
- *
335
- */
336
- if (!function_exists('_e')) {
337
- function _e($str)
338
- {
339
- return $str;
340
- }
341
- }
342
-
343
- /**
344
- *
345
- */
346
- if (!function_exists('plugin_basename')) {
347
- function plugin_basename($path)
348
- {
349
- return $path;
350
- }
351
- }
352
-
353
- /**
354
- *
355
- */
356
- if (!function_exists('settings_error')) {
357
- function settings_error($error)
358
- {
359
- return $error;
360
- }
361
- }
362
-
363
- /**
364
- *
365
- */
366
- if (!function_exists('add_menu_page')) {
367
- function add_menu_page()
368
- {
369
- }
370
- }
371
-
372
- /**
373
- * Get Home Url
374
- *
375
- * @return path
376
- */
377
- if (!function_exists('get_home_url')) {
378
- function get_home_url()
379
- {
380
- return __DIR__;
381
- }
382
- }
383
-
384
- if (!function_exists('wp_load_translations_early')) {
385
- function wp_load_translations_early()
386
- {
387
- return null;
388
- }
389
- }
390
-
391
- /**
392
- * Translate string if available
393
- *
394
- * @return string
395
- */
396
- if (!function_exists('__')) {
397
- function __($string)
398
- {
399
- return $string;
400
- }
401
- }
402
-
403
- if (!function_exists('wp_send_json')) {
404
- function wp_send_json( $response, $status_code = null ) {
405
- //return $response;
406
- die(json_encode($response));
407
- }
408
- }
409
-
410
- if (!function_exists('is_localhost')) {
411
- function is_localhost($whitelist = ['127.0.0.1', '::1']) {
412
- return in_array($_SERVER['REMOTE_ADDR'], $whitelist);
413
- }
414
- }
415
-
416
- if (!function_exists('esc_html')) {
417
- function esc_html( $text ) {
418
- return $text;
419
- }
420
- }
421
-
422
- if (!function_exists('size_format')) {
423
- function size_format( $bytes, $decimals = 0 ) {
424
- return $bytes;
425
- }
426
- }
427
- if (!function_exists('wp_mail')) {
428
- function wp_mail(){
429
-
430
- }
431
- }
432
-
433
- if (!function_exists('wp_debug_backtrace_summary')) {
434
- function wp_debug_backtrace_summary(){
435
-
436
- }
437
- }
438
-
439
-
440
- // function current_user_can(){}
441
- // function sanitize_key(){}
442
- // function plugin_dir_url() {}
443
- // function human_time_diff() {}
444
- // function size_format(){}
445
- // function wp_get_schedules() {}
446
- // function wp_send_json() {}
447
- // function get_site_url() {}
448
- // function get_home_url() {}
449
- // function wp_mail() {}
450
- // function __(){}
451
- // function admin_url(){}
452
- // function load_plugin_textdomain() {}
453
- // function wp_clear_scheduled_hook() {}
454
- // function wp_unschedule_event() {}
455
- // function wp_schedule_event() {}
456
- // function wp_next_scheduled() {}
457
- // function wp_schedule_single_event() {}
458
- // function add_settings_section() {}
459
- // function register_setting() {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public/class-xcloner-public.php DELETED
@@ -1,102 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * The public-facing functionality of the plugin.
5
- *
6
- * @link https://watchful.net
7
- * @since 1.0.0
8
- *
9
- * @package Xcloner
10
- * @subpackage Xcloner/public
11
- */
12
-
13
- /**
14
- * The public-facing functionality of the plugin.
15
- *
16
- * Defines the plugin name, version, and two examples hooks for how to
17
- * enqueue the admin-specific stylesheet and JavaScript.
18
- *
19
- * @package Xcloner
20
- * @subpackage Xcloner/public
21
- * @author Liuta Ovidiu <info@thinkovi.com>
22
- */
23
- class Xcloner_Public {
24
-
25
- /**
26
- * The ID of this plugin.
27
- *
28
- * @since 1.0.0
29
- * @access private
30
- * @var string $plugin_name The ID of this plugin.
31
- */
32
- private $plugin_name;
33
-
34
- /**
35
- * The version of this plugin.
36
- *
37
- * @since 1.0.0
38
- * @access private
39
- * @var string $version The current version of this plugin.
40
- */
41
- private $version;
42
-
43
- /**
44
- * Initialize the class and set its properties.
45
- *
46
- * @since 1.0.0
47
- *
48
- */
49
- public function __construct(Xcloner $xcloner_container) {
50
-
51
- $this->plugin_name = $xcloner_container->get_plugin_name();
52
- $this->version = $xcloner_container->get_version();
53
-
54
- }
55
-
56
- /**
57
- * Register the stylesheets for the public-facing side of the site.
58
- *
59
- * @since 1.0.0
60
- */
61
- public function enqueue_styles() {
62
-
63
- /**
64
- * This function is provided for demonstration purposes only.
65
- *
66
- * An instance of this class should be passed to the run() function
67
- * defined in Xcloner_Loader as all of the hooks are defined
68
- * in that particular class.
69
- *
70
- * The Xcloner_Loader will then create the relationship
71
- * between the defined hooks and the functions defined in this
72
- * class.
73
- */
74
-
75
- wp_enqueue_style($this->plugin_name, plugin_dir_url(__FILE__).'css/xcloner-public.css', array(), $this->version, 'all');
76
-
77
- }
78
-
79
- /**
80
- * Register the JavaScript for the public-facing side of the site.
81
- *
82
- * @since 1.0.0
83
- */
84
- public function enqueue_scripts() {
85
-
86
- /**
87
- * This function is provided for demonstration purposes only.
88
- *
89
- * An instance of this class should be passed to the run() function
90
- * defined in Xcloner_Loader as all of the hooks are defined
91
- * in that particular class.
92
- *
93
- * The Xcloner_Loader will then create the relationship
94
- * between the defined hooks and the functions defined in this
95
- * class.
96
- */
97
-
98
- wp_enqueue_script($this->plugin_name, plugin_dir_url(__FILE__).'js/xcloner-public.js', array('jquery'), $this->version, false);
99
-
100
- }
101
-
102
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public/css/xcloner-public.css DELETED
@@ -1,4 +0,0 @@
1
- /**
2
- * All of the CSS for your public-facing functionality should be
3
- * included in this file.
4
- */
 
 
 
 
public/index.php DELETED
@@ -1 +0,0 @@
1
- <?php // Silence is golden
 
public/js/xcloner-public.js DELETED
@@ -1,32 +0,0 @@
1
- (function( $ ) {
2
- 'use strict';
3
-
4
- /**
5
- * All of the code for your public-facing JavaScript source
6
- * should reside in this file.
7
- *
8
- * Note: It has been assumed you will write jQuery code here, so the
9
- * $ function reference has been prepared for usage within the scope
10
- * of this function.
11
- *
12
- * This enables you to define handlers, for when the DOM is ready:
13
- *
14
- * $(function() {
15
- *
16
- * });
17
- *
18
- * When the window is loaded:
19
- *
20
- * $( window ).load(function() {
21
- *
22
- * });
23
- *
24
- * ...and/or other possibilities.
25
- *
26
- * Ideally, it is not considered best practise to attach more than a
27
- * single DOM-ready or window-load handler for a particular page.
28
- * Although scripts in the WordPress core, Plugins and Themes may be
29
- * practising this, we should strive to set a better example in our own work.
30
- */
31
-
32
- })( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
public/partials/xcloner-public-display.php DELETED
@@ -1,16 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Provide a public-facing view for the plugin
5
- *
6
- * This file is used to markup the public-facing aspects of the plugin.
7
- *
8
- * @link https://watchful.net
9
- * @since 1.0.0
10
- *
11
- * @package Xcloner
12
- * @subpackage Xcloner/public/partials
13
- */
14
- ?>
15
-
16
- <!-- This file should primarily consist of HTML with a little bit of PHP. -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
restore/generate_phar.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ echo shell_exec ("composer require watchfulli/xcloner-core:dev-restore");
4
+
5
+ $file = __DIR__.'/vendor.phar';
6
+ $dest = __DIR__ . '/vendor.build.txt';
7
+
8
+ if (file_exists($file)) {
9
+ unlink($file);
10
+ }
11
+
12
+ $phar2 = new Phar($file, 0, 'vendor.phar');
13
+
14
+ // add all files in the project, only include php files
15
+ $phar2->buildFromIterator(
16
+ new RecursiveIteratorIterator(
17
+ new RecursiveDirectoryIterator(__DIR__.'/vendor/')
18
+ ),
19
+ __DIR__
20
+ );
21
+
22
+ $phar2->setStub($phar2->createDefaultStub('vendor/autoload.php', 'vendor/autoload.php'));
23
+
24
+
25
+ if(copy($file, $dest)) {
26
+ unlink($file);
27
+ }
restore/vendor.build.txt CHANGED
Binary file
restore/xcloner_restore.php CHANGED
@@ -1,65 +1,54 @@
1
  <?php
2
 
3
- if (!defined('AUTH_KEY'))
4
- {
5
- define('AUTH_KEY', '');
6
  }
7
 
8
- if (!defined("DS"))
9
- {
10
- define("DS", DIRECTORY_SEPARATOR);
11
  }
12
 
13
- if (!defined('XCLONER_PLUGIN_ACCESS') || XCLONER_PLUGIN_ACCESS != 1)
14
- {
15
- if (!AUTH_KEY)
16
- {
17
- Xcloner_Restore::send_response("404", "Could not run restore script, AUTH_KEY not set! Your should not access this script directly, it's url should go inside the XCloner Restore area from where you downloaded this script.");
18
- exit;
19
- }
20
-
21
- if (!isset($_REQUEST['hash']))
22
- {
23
- Xcloner_Restore::send_response("404", "Could not run restore script directly. Enter the URL above in the `Restore Backup` area of XCloner and click `Check Connection`.");
24
- exit;
25
- }
26
-
27
- if ($_REQUEST['hash'] != AUTH_KEY)
28
- {
29
- Xcloner_Restore::send_response("404", "Could not run restore script, AUTH_KEY doesn't match the sent HASH. Please replace the restore script on the remote/target host with a new copy downloaded from the local site and try again.");
30
- exit;
31
- }
32
  }
33
 
34
  //check minimum PHP version
35
- if (version_compare(phpversion(), Xcloner_Restore::xcloner_minimum_version, '<'))
36
- {
37
- Xcloner_Restore::send_response(500, sprintf(("XCloner requires minimum PHP version %s in order to run correctly. We have detected your version as %s"), Xcloner_Restore::xcloner_minimum_version, phpversion()));
38
- exit;
39
-
40
  }
41
 
42
- $file = dirname(__DIR__).DS.'vendor'.DS.'autoload.php';
 
43
 
44
- if (file_exists($file))
45
- {
46
-
47
- require_once($file);
48
- }
49
- elseif (file_exists("vendor.phar") and extension_loaded('phar'))
50
- {
51
- require_once(__DIR__.DS."vendor.phar");
52
- } else {
53
-
54
- $file = dirname(__FILE__).DS.'vendor'.DS.'autoload.php';
55
-
56
- if (!file_exists($file))
57
- {
58
- Xcloner_Restore::send_response("404", "File $file does not exists, please extract the vendor.tgz archive on the server or enable PHP Phar module!");
59
- exit;
60
- }
61
-
62
- require_once($file);
63
  }
64
 
65
 
@@ -75,905 +64,867 @@ use splitbrain\PHPArchive\FileInfo;
75
  use Monolog\Logger;
76
  use Monolog\Handler\StreamHandler;
77
 
 
78
 
79
  //do not modify below
80
  $that = "";
81
- if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS)
82
- {
83
- $that = $this;
84
- }
85
- $xcloner_restore = new Xcloner_Restore($that);
86
-
87
- try {
88
- $return = $xcloner_restore->init();
89
- $xcloner_restore->send_response(200, $return);
90
- }catch (Exception $e) {
91
- $xcloner_restore->send_response(417, $e->getMessage());
92
  }
93
 
 
 
 
94
  class Xcloner_Restore
95
  {
96
-
97
- const xcloner_minimum_version = "5.4.0";
98
-
99
- private $backup_archive_extensions = array("zip", "tar", "tgz", "tar.gz", "gz", "csv");
100
- private $process_files_limit = 150;
101
- private $process_files_limit_list = 350;
102
- private $process_mysql_records_limit = 250;
103
- private $adapter;
104
- private $filesystem;
105
- private $logger;
106
- private $backup_storage_dir;
107
- private $parent_api;
108
-
109
- private $target_adapter;
110
- private $target_filesystem;
111
-
112
- /**
113
- * Xcloner_Restore constructor.
114
- * @param string $parent_api
115
- * @throws Exception
116
- */
117
- public function __construct($parent_api = "")
118
- {
119
- register_shutdown_function(array($this, 'exception_handler'));
120
-
121
- if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS)
122
- {
123
- $dir = $parent_api->get_xcloner_container()->get_xcloner_settings()->get_xcloner_store_path();
124
- }
125
-
126
- if (!isset($dir) || !$dir) {
127
- $dir = dirname(__FILE__);
128
- }
129
-
130
- $this->parent_api = $parent_api;
131
-
132
- $this->backup_storage_dir = $dir;
133
-
134
- $this->adapter = new Local($dir, LOCK_EX, 'SKIP_LINKS');
135
- $this->filesystem = new Filesystem($this->adapter, new Config([
136
- 'disable_asserts' => true,
137
- ]));
138
-
139
- $this->logger = new Logger('xcloner_restore');
140
-
141
- $logger_path = $this->get_logger_filename();
142
-
143
- if (!is_writeable($logger_path) and !touch($logger_path))
144
- {
145
- $logger_path = "php://stderr";
146
- }
147
-
148
- $this->logger->pushHandler(new StreamHandler($logger_path, Logger::DEBUG));
149
-
150
- if (isset($_POST['API_ID'])) {
151
- $this->logger->info("Processing ajax request ID ".substr(filter_input(INPUT_POST, 'API_ID', FILTER_SANITIZE_STRING), 0, 15));
152
- }
153
-
154
- }
155
-
156
- /**
157
- * Exception handler method
158
- */
159
- public function exception_handler() {
160
-
161
- $error = error_get_last();
162
-
163
- if ($error['type'] and $this->logger)
164
- {
165
- $this->logger->info($this->friendly_error_type($error['type']).": ".var_export($error, true));
166
- }
167
-
168
- }
169
-
170
- /**
171
- * @param $type
172
- * @return mixed|string
173
- */
174
- private function friendly_error_type($type) {
175
- static $levels = null;
176
- if ($levels === null) {
177
- $levels = [];
178
- foreach (get_defined_constants() as $key=>$value) {
179
- if (strpos($key, 'E_') !== 0) {continue; }
180
- $levels[$value] = $key; //substr($key,2);
181
- }
182
- }
183
- return (isset($levels[$type]) ? $levels[$type] : "Error #{$type}");
184
- }
185
-
186
- public function get_logger_filename()
187
- {
188
- $filename = $this->backup_storage_dir.DS."xcloner_restore.log";
189
-
190
- return $filename;
191
- }
192
-
193
- /**
194
- * Init method
195
- *
196
- * @return mixed|void
197
- * @throws Exception
198
- */
199
- public function init()
200
- {
201
- if (isset($_POST['xcloner_action']) and $_POST['xcloner_action'])
202
- {
203
- $method = filter_input(INPUT_POST, 'xcloner_action', FILTER_SANITIZE_STRING);
204
-
205
- //$method = "list_backup_archives";
206
-
207
- $method .= "_action";
208
-
209
- if (method_exists($this, $method))
210
- {
211
- $this->logger->debug(sprintf('Starting action %s', $method));
212
- return call_user_func(array($this, $method));
213
-
214
- } else {
215
- throw new Exception($method." does not exists");
216
- }
217
- }
218
-
219
- return $this->check_system();
220
- }
221
-
222
- /**
223
- * Write file method
224
- *
225
- * @return bool|int
226
- * @throws Exception
227
- */
228
- public function write_file_action()
229
- {
230
- if (isset($_POST['file']))
231
- {
232
- $target_file = filter_input(INPUT_POST, 'file', FILTER_SANITIZE_STRING);
233
-
234
- if (!$_POST['start'])
235
- $fp = fopen($target_file, "wb+");
236
- else
237
- $fp = fopen($target_file, "ab+");
238
-
239
- if (!$fp)
240
- throw new Exception("Unable to open $target_file file for writing");
241
-
242
- fseek($fp, $_POST['start']);
243
-
244
- if (isset($_FILES['blob']))
245
- {
246
- $this->logger->debug(sprintf('Writing %s bytes to file %s starting position %s using FILES blob', filesize($_FILES['blob']['tmp_name']), $target_file, $_POST['start']));
247
-
248
- $blob = file_get_contents($_FILES['blob']['tmp_name']);
249
-
250
- if (!$bytes_written = fwrite($fp, $blob))
251
- throw new Exception("Unable to write data to file $target_file");
252
-
253
- try {
254
- unlink($_FILES['blob']['tmp_name']);
255
- }catch (Exception $e) {
256
- //silent message
257
- }
258
-
259
- }elseif (isset($_POST['blob'])) {
260
- $this->logger->debug(sprintf('Writing %s bytes to file %s starting position %s using POST blob', strlen($_POST['blob']), $target_file, $_POST['start']));
261
-
262
- $blob = $_POST['blob'];
263
-
264
- if (!$bytes_written = fwrite($fp, $blob))
265
- throw new Exception("Unable to write data to file $target_file");
266
- } else {
267
- throw new Exception("Upload failed, did not receive any binary data");
268
- }
269
-
270
- fclose($fp);
271
- }
272
-
273
- return $bytes_written;
274
-
275
- }
276
-
277
- /**
278
- * Connect to mysql server method
279
- *
280
- * @param $remote_mysql_host
281
- * @param $remote_mysql_user
282
- * @param $remote_mysql_pass
283
- * @param $remote_mysql_db
284
- * @return mysqli
285
- * @throws Exception
286
- */
287
- public function mysql_connect($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db)
288
- {
289
- $this->logger->info(sprintf('Connecting to mysql database %s with %s@%s', $remote_mysql_db, $remote_mysql_user, $remote_mysql_host));
290
-
291
- $mysqli = new mysqli($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
292
-
293
- if ($mysqli->connect_error) {
294
- throw new Exception('Connect Error ('.$mysqli->connect_errno.') '
295
- . $mysqli->connect_error);
296
- }
297
-
298
- $mysqli->query("SET sql_mode='';");
299
- $mysqli->query("SET foreign_key_checks = 0;");
300
- if (isset($_REQUEST['charset_of_file']) and $_REQUEST['charset_of_file'])
301
- $mysqli->query("SET NAMES ".$_REQUEST['charset_of_file']."");
302
- else
303
- $mysqli->query("SET NAMES utf8;");
304
-
305
- return $mysqli;
306
- }
307
-
308
- /**
309
- * Restore mysql backup file
310
- *
311
- * @throws Exception
312
- */
313
- public function restore_mysql_backup_action()
314
- {
315
- $mysqldump_file = filter_input(INPUT_POST, 'mysqldump_file', FILTER_SANITIZE_STRING);
316
- $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
317
- $remote_mysql_user = filter_input(INPUT_POST, 'remote_mysql_user', FILTER_SANITIZE_STRING);
318
- $remote_mysql_pass = filter_input(INPUT_POST, 'remote_mysql_pass', FILTER_SANITIZE_STRING);
319
- $remote_mysql_db = filter_input(INPUT_POST, 'remote_mysql_db', FILTER_SANITIZE_STRING);
320
- $remote_mysql_host = filter_input(INPUT_POST, 'remote_mysql_host', FILTER_SANITIZE_STRING);
321
- $execute_query = trim(stripslashes($_POST['query']));
322
- $error_line = filter_input(INPUT_POST, 'error_line', FILTER_SANITIZE_NUMBER_INT);
323
- $start = filter_input(INPUT_POST, 'start', FILTER_SANITIZE_NUMBER_INT);
324
-
325
- $wp_home_url = filter_input(INPUT_POST, 'wp_home_url', FILTER_SANITIZE_STRING);
326
- $remote_restore_url = filter_input(INPUT_POST, 'remote_restore_url', FILTER_SANITIZE_STRING);
327
-
328
- $wp_site_url = filter_input(INPUT_POST, 'wp_site_url', FILTER_SANITIZE_STRING);
329
- $restore_site_url = filter_input(INPUT_POST, 'restore_site_url', FILTER_SANITIZE_STRING);
330
-
331
- $mysql_backup_file = $remote_path.DS.$mysqldump_file;
332
-
333
- if (!file_exists($mysql_backup_file))
334
- throw new Exception(sprintf("Mysql backup file %s does not exists", $mysql_backup_file));
335
-
336
-
337
- /*if(defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS)
338
- {
339
- global $wpdb;
340
- //$mysqli = $this->parent_api->get_xcloner_container()->get_xcloner_database();
341
- $remote_mysql_host = $wpdb->dbhost;
342
- $remote_mysql_user = $wpdb->dbuser;
343
- $remote_mysql_pass = $wpdb->dbpassword;
344
- $remote_mysql_db = $wpdb->dbname;
345
- }*/
346
-
347
- {
348
- $mysqli = $this->mysql_connect($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
349
- }
350
-
351
- $line_count = 0;
352
- $query = "";
353
- $return = array();
354
- $return['finished'] = 1;
355
- $return['backup_file'] = $mysqldump_file;
356
- $return['backup_size'] = filesize($mysql_backup_file);
357
-
358
- $fp = fopen($mysql_backup_file, "r");
359
- if ($fp)
360
- {
361
- $this->logger->info(sprintf("Opening mysql dump file %s at position %s.", $mysql_backup_file, $start));
362
- fseek($fp, $start);
363
- while ($line_count <= $this->process_mysql_records_limit and ($line = fgets($fp)) !== false) {
364
- // process the line read.
365
-
366
- //check if line is comment
367
- if (substr($line, 0, 1) == "#")
368
- continue;
369
-
370
- //check if line is empty
371
- if ($line == "\n" or trim($line) == "")
372
- continue;
373
-
374
- //exclude usermeta info for local restores to fix potential session logout
375
  if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS) {
376
  if (strpos($line, "_usermeta`") !== false) {
377
  $line = str_replace("_usermeta`", "_usermeta2`", $line);
378
  }
379
  }
380
 
381
- if (substr($line, strlen($line) - 2, strlen($line)) == ";\n")
382
- $query .= $line;
383
- else {
384
- $query .= $line;
385
- continue;
386
- }
387
-
388
- if ($execute_query)
389
- {
390
- $query = (($execute_query));
391
- $execute_query = "";
392
- }
393
-
394
- //Doing serialized url replace here
395
-
396
- if ($wp_site_url and $wp_home_url and strlen($wp_home_url) < strlen($wp_site_url))
397
- {
398
- list($wp_home_url, $wp_site_url) = array($wp_site_url, $wp_home_url);
399
- list($remote_restore_url, $restore_site_url) = array($restore_site_url, $remote_restore_url);
400
-
401
- }
402
-
403
- if ($wp_home_url and $remote_restore_url and strpos($query, $wp_home_url) !== false)
404
- {
405
- $query = $this->url_replace($wp_home_url, $remote_restore_url, $query);
406
- }
407
-
408
- if ($wp_site_url and $restore_site_url and strpos($query, $wp_site_url) !== false)
409
- {
410
- $query = $this->url_replace($wp_site_url, $restore_site_url, $query);
411
- }
412
-
413
- if (!$mysqli->query($query) && !stristr($mysqli->error, "Duplicate entry"))
414
- {
415
- //$return['error_line'] = $line_count;
416
- $return['start'] = ftell($fp) - strlen($line);
417
- $return['query_error'] = true;
418
- $return['query'] = $query;
419
- $return['message'] = sprintf("Mysql Error: %s\n", $mysqli->error);
420
-
421
- $this->logger->error($return['message']);
422
-
423
- $this->send_response(418, $return);
424
- //throw new Exception(sprintf("Mysql Error: %s\n Mysql Query: %s", $mysqli->error, $query));
425
- }
426
- //else echo $line;
427
-
428
- $query = "";
429
-
430
- $line_count++;
431
-
432
- }
433
-
434
- $return['start'] = ftell($fp);
435
-
436
- $this->logger->info(sprintf("Executed %s queries of size %s bytes", $line_count, ($return['start'] - $start)));
437
-
438
- if (!feof($fp))
439
- {
440
- $return['finished'] = 0;
441
- } else {
442
- $this->logger->info(sprintf("Mysql Import Done."));
443
- }
444
-
445
- fclose($fp);
446
- }
447
-
448
- $this->send_response(200, $return);
449
- }
450
-
451
- /**
452
- * Url replace method inside database backup file
453
- *
454
- * @param $search
455
- * @param $replace
456
- * @param $query
457
- * @return mixed|string|string[]|null
458
- */
459
- private function url_replace($search, $replace, $query)
460
- {
461
- $this->logger->info(sprintf("Doing url replace on query with length %s", strlen($query)), array("QUERY_REPLACE"));
462
- $query = str_replace($search, $replace, $query);
463
- $original_query = $query;
464
-
465
- if ($this->has_serialized($query))
466
- {
467
- $this->logger->info(sprintf("Query contains serialized data, doing serialized size fix"), array("QUERY_REPLACE"));
468
- $query = $this->do_serialized_fix($query);
469
-
470
- if (!$query)
471
- {
472
- $this->logger->info(sprintf("Serialization probably failed here..."), array("QUERY_REPLACE"));
473
- $query = $original_query;
474
- }
475
- }
476
- $this->logger->info(sprintf("New query length is %s", strlen($query)), array("QUERY_REPLACE"));
477
-
478
- return $query;
479
- }
480
-
481
- /**
482
- * List backup files method
483
- *
484
- * @throws \League\Flysystem\FileNotFoundException
485
- */
486
- public function list_backup_files_action()
487
- {
488
- $backup_parts = array();
489
-
490
- $source_backup_file = filter_input(INPUT_POST, 'file', FILTER_SANITIZE_STRING);
491
- $start = (int)filter_input(INPUT_POST, 'start', FILTER_SANITIZE_STRING);
492
- $return['part'] = (int)filter_input(INPUT_POST, 'part', FILTER_SANITIZE_STRING);
493
-
494
- $backup_file = $source_backup_file;
495
-
496
- if ($this->is_multipart($backup_file))
497
- {
498
- $backup_parts = $this->get_multipart_files($backup_file);
499
- $backup_file = $backup_parts[$return['part']];
500
- }
501
-
502
- try {
503
- $tar = new Xcloner_Archive_Restore();
504
- $tar->open($this->backup_storage_dir.DS.$backup_file, $start);
505
-
506
- $data = $tar->contents($this->process_files_limit_list);
507
- }catch (Exception $e)
508
- {
509
- $return['error'] = true;
510
- $return['message'] = $e->getMessage();
511
- $this->send_response(200, $return);
512
- }
513
-
514
- $return['files'] = array();
515
- $return['finished'] = 1;
516
- $return['total_size'] = filesize($this->backup_storage_dir.DS.$backup_file);
517
- $i = 0;
518
-
519
- if (isset($data['extracted_files']) and is_array($data['extracted_files']))
520
- {
521
- foreach ($data['extracted_files'] as $file)
522
- {
523
- $return['files'][$i]['path'] = $file->getPath();
524
- $return['files'][$i]['size'] = $file->getSize();
525
- $return['files'][$i]['mtime'] = date("d M,Y H:i", $file->getMtime());
526
-
527
- $i++;
528
- }
529
- }
530
-
531
- if (isset($data['start']))
532
- {
533
- $return['start'] = $data['start'];
534
- $return['finished'] = 0;
535
- } else {
536
- if ($this->is_multipart($source_backup_file))
537
- {
538
- $return['start'] = 0;
539
-
540
- ++$return['part'];
541
-
542
- if ($return['part'] < sizeof($backup_parts))
543
- $return['finished'] = 0;
544
-
545
- }
546
- }
547
-
548
- $this->send_response(200, $return);
549
- }
550
-
551
- /**
552
- * Finish backup restore method
553
- *
554
- * @throws \League\Flysystem\FileNotFoundException
555
- */
556
- public function restore_finish_action()
557
- {
558
- $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
559
-
560
- $wp_home_url = filter_input(INPUT_POST, 'wp_home_url', FILTER_SANITIZE_STRING);
561
- $remote_restore_url = filter_input(INPUT_POST, 'remote_restore_url', FILTER_SANITIZE_STRING);
562
-
563
- $remote_mysql_user = filter_input(INPUT_POST, 'remote_mysql_user', FILTER_SANITIZE_STRING);
564
- $remote_mysql_pass = filter_input(INPUT_POST, 'remote_mysql_pass', FILTER_SANITIZE_STRING);
565
- $remote_mysql_db = filter_input(INPUT_POST, 'remote_mysql_db', FILTER_SANITIZE_STRING);
566
- $remote_mysql_host = filter_input(INPUT_POST, 'remote_mysql_host', FILTER_SANITIZE_STRING);
567
-
568
- $update_remote_site_url = filter_input(INPUT_POST, 'update_remote_site_url', FILTER_SANITIZE_NUMBER_INT);
569
- $delete_restore_script = filter_input(INPUT_POST, 'delete_restore_script', FILTER_SANITIZE_NUMBER_INT);
570
- $delete_backup_temporary_folder = filter_input(INPUT_POST, 'delete_backup_temporary_folder', FILTER_SANITIZE_NUMBER_INT);
571
-
572
- if ($update_remote_site_url)
573
- {
574
- $mysqli = $this->mysql_connect($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
575
- $this->update_wp_config($remote_path, $remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
576
- $this->update_wp_url($remote_path, $remote_restore_url, $mysqli);
577
- }
578
-
579
- if ($delete_backup_temporary_folder)
580
- {
581
- $this->delete_backup_temporary_folder($remote_path);
582
- }
583
-
584
- if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS)
585
- {
586
- //fixing usermeta table for local restores
587
- global $wpdb;
588
- if ($result = $wpdb->get_var("SELECT count(*) FROM ".$wpdb->prefix."usermeta2")) {
589
- if($result > 0 ) {
590
- $wpdb->query("DROP TABLE IF EXISTS ".$wpdb->prefix."usermeta_backup" );
591
- $wpdb->query("ALTER TABLE ".$wpdb->prefix."usermeta RENAME TO ".$wpdb->prefix."usermeta_backup" );
592
- $wpdb->query("ALTER TABLE ".$wpdb->prefix."usermeta2 RENAME TO ".$wpdb->prefix."usermeta" );
593
- }
594
- }
595
- }
596
-
597
- if (!defined('XCLONER_PLUGIN_ACCESS') || XCLONER_PLUGIN_ACCESS != 1)
598
- {
599
- if ($delete_restore_script)
600
- {
601
- $this->delete_self();
602
- }
603
- }
604
-
605
- $return = "Restore Process Finished.";
606
- $this->send_response(200, $return);
607
- }
608
-
609
- /**
610
- * Delete backup temporary folder
611
- *
612
- * @param $remote_path
613
- * @return bool
614
- */
615
- private function delete_backup_temporary_folder($remote_path)
616
- {
617
- $this->target_adapter = new Local($remote_path, LOCK_EX, 'SKIP_LINKS');
618
- $this->target_filesystem = new Filesystem($this->target_adapter, new Config([
619
- 'disable_asserts' => true,
620
- ]));
621
-
622
- $mysqldump_list = array();
623
- $list = $this->target_filesystem->listContents();
624
-
625
- foreach ($list as $file)
626
- {
627
- $matches = array();
628
-
629
- if ($file['type'] == "dir")
630
- {
631
- if (preg_match("/xcloner-(\w*)/", $file['basename'], $matches)) {
632
- $this->logger->info(sprintf('Deleting temporary folder %s', $file['path']));
633
- $this->target_filesystem->deleteDir($file['path']);
634
- }
635
- }
636
- }
637
-
638
- return true;
639
-
640
- }
641
-
642
- /**
643
- * Delete restore script method
644
- *
645
- * @throws \League\Flysystem\FileNotFoundException
646
- */
647
- private function delete_self()
648
- {
649
- if ($this->filesystem->has("vendor.phar"))
650
- {
651
- $this->logger->info(sprintf('Deleting vendor.phar'));
652
- $this->filesystem->delete("vendor.phar");
653
- }
654
- if ($this->filesystem->has("vendor"))
655
- {
656
- $this->logger->info(sprintf('Deleting vendor folder'));
657
- $this->filesystem->deleteDir("vendor");
658
- }
659
- if ($this->filesystem->has("xcloner_restore.php"))
660
- {
661
- $this->logger->info(sprintf('Deleting xcloner_restore.php'));
662
- $this->filesystem->delete("xcloner_restore.php");
663
- }
664
-
665
- if ($this->filesystem->has("xcloner_restore.log"))
666
- {
667
- $this->logger->info(sprintf('Deleting xcloner_restore.log'));
668
- $this->filesystem->delete("xcloner_restore.log");
669
- }
670
-
671
- if ($this->filesystem->has($this->get_logger_filename()))
672
- {
673
- $this->logger->info(sprintf('Deleting logger file %s', $this->get_logger_filename()));
674
- $this->filesystem->delete($this->get_logger_filename());
675
- }
676
-
677
- }
678
-
679
- /**
680
- * Update Wordpress url in wp-config.php method
681
- * @param $wp_path
682
- * @param $url
683
- * @param mysqli $mysqli
684
- * @return bool
685
- * @throws Exception
686
- */
687
- private function update_wp_url($wp_path, $url, $mysqli)
688
- {
689
- $wp_config = $wp_path.DS."wp-config.php";
690
-
691
- $this->logger->info(sprintf('Updating site url to %s', $url));
692
-
693
- if (file_exists($wp_config))
694
- {
695
- $config = file_get_contents($wp_config);
696
- preg_match("/.*table_prefix.*=.*'(.*)'/i", $config, $matches);
697
- if (isset($matches[1]))
698
- $table_prefix = $matches[1];
699
- else
700
- throw new Exception("Could not load wordpress table prefix from wp-config.php file.");
701
- }
702
- else
703
- throw new Exception("Could not update the SITEURL and HOME, wp-config.php file not found");
704
-
705
- if (!$mysqli->query("update ".$table_prefix."options set option_value='".($url)."' where option_name='home'"))
706
- throw new Exception(sprintf("Could not update the HOME option, error: %s\n", $mysqli->error));
707
-
708
- if (!$mysqli->query("update ".$table_prefix."options set option_value='".($url)."' where option_name='siteurl'"))
709
- throw new Exception(sprintf("Could not update the SITEURL option, error: %s\n", $mysqli->error));
710
-
711
- return true;
712
- }
713
-
714
- /**
715
- * Update local wp-config.php file method
716
- *
717
- * @param $remote_path
718
- * @param $remote_mysql_host
719
- * @param $remote_mysql_user
720
- * @param $remote_mysql_pass
721
- * @param $remote_mysql_db
722
- * @return string
723
- * @throws Exception
724
- */
725
- private function update_wp_config($remote_path, $remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db)
726
- {
727
- $wp_config = $remote_path.DS."wp-config.php";
728
-
729
- if (!file_exists($wp_config))
730
- {
731
- throw new Exception("Could not find the wp-config.php in ".$remote_path);
732
- }
733
-
734
- $content = file_get_contents($wp_config);
735
-
736
- $content = preg_replace("/(?<=DB_NAME', ')(.*?)(?='\);)/", $remote_mysql_db, $content);
737
- $content = preg_replace("/(?<=DB_USER', ')(.*?)(?='\);)/", $remote_mysql_user, $content);
738
- $content = preg_replace("/(?<=DB_PASSWORD', ')(.*?)(?='\);)/", $remote_mysql_pass, $content);
739
- $content = preg_replace("/(?<=DB_HOST', ')(.*?)(?='\);)/", $remote_mysql_host, $content);
740
-
741
- $file_perms = fileperms($wp_config);
742
-
743
- chmod($wp_config, 0777);
744
-
745
- $this->logger->info(sprintf('Updating wp-config.php file with the new mysql details'));
746
-
747
- if (!file_put_contents($wp_config, $content))
748
- throw new Exception("Could not write updated config data to ".$wp_config);
749
-
750
- chmod($wp_config, $file_perms);
751
-
752
- return $wp_config;
753
-
754
- }
755
-
756
- /**
757
- * List mysqldump database backup files
758
- *
759
- */
760
- public function list_mysqldump_backups_action()
761
- {
762
- $source_backup_file = filter_input(INPUT_POST, 'backup_file', FILTER_SANITIZE_STRING);
763
- $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
764
-
765
- $hash = $this->get_hash_from_backup($source_backup_file);
766
-
767
- $this->target_adapter = new Local($remote_path, LOCK_EX, 'SKIP_LINKS');
768
- $this->target_filesystem = new Filesystem($this->target_adapter, new Config([
769
- 'disable_asserts' => true,
770
- ]));
771
-
772
- $mysqldump_list = array();
773
- $list = $this->target_filesystem->listContents();
774
-
775
- foreach ($list as $file)
776
- {
777
- $matches = array();
778
-
779
- if ($file['type'] == "dir")
780
- {
781
- if (preg_match("/xcloner-(\w*)/", $file['basename'], $matches))
782
- {
783
- $files = $this->target_filesystem->listContents($file['basename']);
784
- foreach ($files as $file)
785
- {
786
- if ($file['extension'] == "sql")
787
- {
788
- $this->logger->info(sprintf('Found %s mysql backup file', $file['path']));
789
- $mysqldump_list[$file['path']]['path'] = $file['path'];
790
- $mysqldump_list[$file['path']]['size'] = $file['size'];
791
- $mysqldump_list[$file['path']]['timestamp'] = date("d M,Y H:i", $file['timestamp']);
792
-
793
- if ($hash and $hash == $matches[1])
794
- $mysqldump_list[$file['path']]['selected'] = "selected";
795
- else
796
- $mysqldump_list[$file['path']]['selected'] = "";
797
- }
798
- }
799
- }
800
- }
801
- }
802
-
803
- $this->sort_by($mysqldump_list, 'timestamp', 'desc');
804
- $return['files'] = $mysqldump_list;
805
-
806
- $this->send_response(200, $return);
807
- }
808
-
809
- /**
810
- * Get backup hash method
811
- *
812
- * @param $backup_file
813
- * @return false|string
814
- */
815
- private function get_hash_from_backup($backup_file)
816
- {
817
- if (!$backup_file)
818
- return false;
819
-
820
- $result = preg_match("/-(\w*)./", substr($backup_file, strlen($backup_file) - 10, strlen($backup_file)), $matches);
821
-
822
- if ($result and isset($matches[1]))
823
- return ($matches[1]);
824
-
825
- return false;
826
- }
827
-
828
- /**
829
- * List backup archives found on local system
830
- *
831
- * @throws \League\Flysystem\FileNotFoundException
832
- */
833
- public function list_backup_archives_action()
834
- {
835
- $local_backup_file = filter_input(INPUT_POST, 'local_backup_file', FILTER_SANITIZE_STRING);
836
- $list = $this->filesystem->listContents();
837
-
838
- $backup_files = array();
839
- $parents = array();
840
-
841
- foreach ($list as $file_info)
842
- {
843
- $data = array();
844
-
845
- if (isset($file_info['extension']) and $file_info['extension'] == "csv")
846
- {
847
- $lines = explode(PHP_EOL, $this->filesystem->read($file_info['path']));
848
- foreach ($lines as $line)
849
- if ($line)
850
- {
851
- $data = str_getcsv($line);
852
- if (is_array($data)) {
853
- $parents[$data[0]] = $file_info['path'];
854
- $file_info['childs'][] = $data;
855
- $file_info['size'] += $data[2];
856
- }
857
- }
858
-
859
- }
860
 
861
- if ($file_info['type'] == 'file' and isset($file_info['extension']) and in_array($file_info['extension'], $this->backup_archive_extensions))
862
- $backup_files[$file_info['path']] = $file_info;
863
- }
864
-
865
- $new_list = array();
866
-
867
- foreach ($backup_files as $key=>$file_info)
868
- {
869
- if (isset($parents[$file_info['path']]))
870
- $backup_files[$key]['parent'] = $parents[$file_info['path']];
871
- else {
872
-
873
- if ($local_backup_file and ($file_info['basename'] == $local_backup_file))
874
- $file_info['selected'] = 'selected';
875
-
876
- $this->logger->info(sprintf('Found %s backup file', $file_info['path']));
877
-
878
- $new_list[$key] = $file_info;
879
- }
880
-
881
- }
882
-
883
- $this->sort_by($new_list, "timestamp", "desc");
884
-
885
- $return['files'] = $new_list;
886
-
887
- $this->send_response(200, $return);
888
-
889
- }
890
-
891
- /**
892
- * Restore backup archive to local path
893
- *
894
- * @throws \League\Flysystem\FileNotFoundException
895
- * @throws \splitbrain\PHPArchive\ArchiveIOException
896
- */
897
- public function restore_backup_to_path_action()
898
- {
899
- $source_backup_file = filter_input(INPUT_POST, 'backup_file', FILTER_SANITIZE_STRING);
900
- $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
901
- $include_filter_files = filter_input(INPUT_POST, 'filter_files', FILTER_SANITIZE_STRING);
902
- $exclude_filter_files = "";
903
- $start = filter_input(INPUT_POST, 'start', FILTER_SANITIZE_NUMBER_INT);
904
- $return['part'] = (int)filter_input(INPUT_POST, 'part', FILTER_SANITIZE_NUMBER_INT);
905
- $return['processed'] = (int)filter_input(INPUT_POST, 'processed', FILTER_SANITIZE_NUMBER_INT);
906
-
907
- $this->target_adapter = new Local($remote_path, LOCK_EX, 'SKIP_LINKS');
908
- $this->target_filesystem = new Filesystem($this->target_adapter, new Config([
909
- 'disable_asserts' => true,
910
- ]));
911
-
912
- $backup_file = $source_backup_file;
913
-
914
- $return['finished'] = 1;
915
- $return['extracted_files'] = array();
916
- $return['total_size'] = $this->get_backup_size($backup_file);
917
-
918
- $backup_archive = new Xcloner_Archive_Restore();
919
- if ($this->is_multipart($backup_file))
920
- {
921
- if (!$return['part'])
922
- $return['processed'] += $this->filesystem->getSize($backup_file);
923
-
924
- $backup_parts = $this->get_multipart_files($backup_file);
925
- $backup_file = $backup_parts[$return['part']];
926
- }
927
-
928
- if( $this->is_encrypted_file($backup_file) ) {
929
- $message = sprintf('Backup file %s seems encrypted, please Decrypt it first from your Manage Backups panel.', $backup_file);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
930
  $this->logger->error($message);
931
  $this->send_response(500, $message);
932
  return;
933
  }
934
-
935
- $this->logger->info(sprintf('Opening backup archive %s at position %s', $backup_file, $start));
936
- $backup_archive->open($this->backup_storage_dir.DS.$backup_file, $start);
937
-
938
- $data = $backup_archive->extract($remote_path, '', $exclude_filter_files, $include_filter_files, $this->process_files_limit);
939
-
940
- if (isset($data['extracted_files']))
941
- {
942
- foreach ($data['extracted_files'] as $spl_fileinfo)
943
- {
944
- $this->logger->info(sprintf('Extracted %s file', $spl_fileinfo->getPath()));
945
- $return['extracted_files'][] = $spl_fileinfo->getPath()." (".$spl_fileinfo->getSize()." bytes)";
946
- }
947
- }
948
-
949
- if (isset($data['start']))
950
- //if(isset($data['start']) and $data['start'] <= $this->filesystem->getSize($backup_file))
951
- {
952
- $return['finished'] = 0;
953
- $return['start'] = $data['start'];
954
- } else {
955
-
956
- $return['processed'] += $start;
957
-
958
- if ($this->is_multipart($source_backup_file))
959
- {
960
- $return['start'] = 0;
961
-
962
- ++$return['part'];
963
-
964
- if ($return['part'] < sizeof($backup_parts))
965
- $return['finished'] = 0;
966
-
967
- }
968
- }
969
-
970
- if ($return['finished'])
971
- $this->logger->info(sprintf('Done extracting %s', $source_backup_file));
972
-
973
- $return['backup_file'] = $backup_file;
974
-
975
- $this->send_response(200, $return);
976
- }
977
 
978
  /**
979
  * Check if provided filename has encrypted suffix
@@ -981,8 +932,9 @@ class Xcloner_Restore
981
  * @param $filename
982
  * @return bool
983
  */
984
- public function is_encrypted_file($filename) {
985
- $fp = $this->filesystem->readStream( $filename );
 
986
  if (is_resource($fp)) {
987
  $encryption_length = fread($fp, 16);
988
  fclose($fp);
@@ -992,454 +944,321 @@ class Xcloner_Restore
992
  }
993
 
994
  return false;
995
-
996
  }
997
 
998
- /**
999
- * Get current directory method
1000
- */
1001
- public function get_current_directory_action()
1002
- {
1003
- global $wpdb;
1004
-
1005
- $restore_script_url = filter_input(INPUT_POST, 'restore_script_url', FILTER_SANITIZE_STRING);
1006
-
1007
- $pathinfo = pathinfo(__FILE__);
1008
-
1009
- $suffix = "";
1010
- $return['remote_mysql_host'] = "localhost";
1011
- $return['remote_mysql_user'] = "";
1012
- $return['remote_mysql_pass'] = "";
1013
- $return['remote_mysql_db'] = "";
1014
-
1015
- if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS)
1016
- {
1017
- $return['dir'] = realpath(get_home_path().DS.$suffix);
1018
- $return['restore_script_url'] = get_site_url();
1019
- $return['remote_mysql_host'] = $wpdb->dbhost;
1020
- $return['remote_mysql_user'] = $wpdb->dbuser;
1021
- $return['remote_mysql_pass'] = $wpdb->dbpassword;
1022
- $return['remote_mysql_db'] = $wpdb->dbname;
1023
- }
1024
- else {
1025
- $return['dir'] = ($pathinfo['dirname']).DS.$suffix;
1026
- $return['restore_script_url'] = str_replace($pathinfo['basename'], "", $restore_script_url).$suffix;
1027
- }
1028
-
1029
- $this->logger->info(sprintf('Determining current url as %s and path as %s', $return['dir'], $return['restore_script_url']));
1030
-
1031
- $this->send_response(200, $return);
1032
- }
1033
-
1034
- /**
1035
- * Check current filesystem
1036
- *
1037
- * @throws Exception
1038
- */
1039
- public function check_system()
1040
- {
1041
- //check if i can write
1042
- $tmp_file = md5(time());
1043
- if (!file_put_contents($tmp_file, "++"))
1044
- throw new Exception("Could not write to new host");
1045
-
1046
- if (!unlink($tmp_file))
1047
- throw new Exception("Could not delete temporary file from new host");
1048
-
1049
- $max_upload = $this->return_bytes((ini_get('upload_max_filesize')));
1050
- $max_post = $this->return_bytes((ini_get('post_max_size')));
1051
-
1052
- $return['max_upload_size'] = min($max_upload, $max_post); // bytes
1053
- $return['status'] = true;
1054
-
1055
- $this->logger->info(sprintf('Current filesystem max upload size is %s bytes', $return['max_upload_size']));
1056
-
1057
- $this->send_response(200, $return);
1058
- }
1059
-
1060
- /**
1061
- * Return bytes from human readable value
1062
- *
1063
- * @param string $val
1064
- * @return int
1065
- *
1066
- */
1067
- private function return_bytes($val) {
1068
- $numeric_val = (int)trim($val);
1069
- $last = strtolower($val[strlen($val) - 1]);
1070
- switch ($last) {
1071
- // The 'G' modifier is available since PHP 5.1.0
1072
- case 'g':
1073
- //gigabytes
1074
- $numeric_val *= 1024;
1075
- case 'm':
1076
- //megabytes
1077
- $numeric_val *= 1024;
1078
- case 'k':
1079
- //kilobytes
1080
- $numeric_val *= 1024;
1081
- }
1082
-
1083
- return $numeric_val;
1084
- }
1085
-
1086
- /**
1087
- * Check if backup archive os multipart
1088
- *
1089
- * @param $backup_name
1090
- * @return bool
1091
- */
1092
- public function is_multipart($backup_name)
1093
- {
1094
- if (stristr($backup_name, "-multipart"))
1095
- return true;
1096
-
1097
- return false;
1098
- }
1099
-
1100
- /**
1101
- * Get backup archive size
1102
- *
1103
- * @param $backup_name
1104
- * @return bool|false|int
1105
- * @throws \League\Flysystem\FileNotFoundException
1106
- */
1107
- public function get_backup_size($backup_name)
1108
- {
1109
- $backup_size = $this->filesystem->getSize($backup_name);
1110
- if ($this->is_multipart($backup_name))
1111
- {
1112
- $backup_parts = $this->get_multipart_files($backup_name);
1113
- foreach ($backup_parts as $part_file)
1114
- $backup_size += $this->filesystem->getSize($part_file);
1115
- }
1116
-
1117
- return $backup_size;
1118
- }
1119
-
1120
- /**
1121
- * Get multipart backup files list
1122
- * @param $backup_name
1123
- * @return array
1124
- * @throws \League\Flysystem\FileNotFoundException
1125
- */
1126
- public function get_multipart_files($backup_name)
1127
- {
1128
- $files = array();
1129
-
1130
- if ($this->is_multipart($backup_name))
1131
- {
1132
- $lines = explode(PHP_EOL, $this->filesystem->read($backup_name));
1133
- foreach ($lines as $line)
1134
- {
1135
- if ($line)
1136
- {
1137
- $data = str_getcsv($line);
1138
- $files[] = $data[0];
1139
- }
1140
- }
1141
- }
1142
-
1143
- return $files;
1144
- }
1145
-
1146
- /**
1147
- * Sort_by method
1148
- *
1149
- * @param $array
1150
- * @param string $field
1151
- * @param string $direction
1152
- * @return bool
1153
- */
1154
- private function sort_by(&$array, $field, $direction = 'asc')
1155
- {
1156
- $direction = strtolower($direction);
1157
-
1158
- usort($array,
1159
-
1160
- /**
1161
- * @param string $b
1162
- */
1163
- function($a, $b) use($field, $direction){
1164
-
1165
- $a = $a[$field];
1166
- $b = $b[$field];
1167
-
1168
- if ($a == $b)
1169
- {
1170
- return 0;
1171
- }
1172
-
1173
- if ($direction == 'desc') {
1174
- if ($a > $b) {
1175
- return -1;
1176
- }
1177
- else {
1178
- return 1;
1179
- }
1180
- } else {
1181
- if ($a < $b) {
1182
- return -1;
1183
- }
1184
- else {
1185
- return 1;
1186
- }
1187
- }
1188
-
1189
- //return ($a.($direction == 'desc' ? '>' : '<').$b) ? -1 : 1;
1190
- }
1191
- );
1192
-
1193
- return true;
1194
- }
1195
-
1196
- /**
1197
- * Send response method
1198
- *
1199
- * @param int $status
1200
- * @param $response
1201
- */
1202
- public static function send_response($status = 200, $response)
1203
- {
1204
- header("Access-Control-Allow-Origin: *");
1205
- header("HTTP/1.1 200");
1206
- header('Content-Type: application/json');
1207
- $return['status'] = $status;
1208
- $return['statusText'] = $response;
1209
-
1210
- if (isset($response['error']) && $response['error'])
1211
- {
1212
- $return['statusText'] = $response['message'];
1213
- $return['error'] = true;
1214
- }elseif ($status != 200 and $status != 418)
1215
- {
1216
- $return['error'] = true;
1217
- $return['message'] = $response;
1218
- }
1219
-
1220
- die (json_encode($return));
1221
-
1222
- }
1223
-
1224
- /**
1225
- * Serialize fix methods below for mysql query lines
1226
- *
1227
- * @param $query
1228
- * @return string
1229
- */
1230
-
1231
- function do_serialized_fix($query)
1232
- {
1233
- $query = str_replace(array("\\n", "\\r", "\\'"), array("", "", "\""), ($query));
1234
-
1235
- return preg_replace_callback('!s:(\d+):([\\\\]?"[\\\\]?"|[\\\\]?"((.*?)[^\\\\])[\\\\]?");!', function($m) {
1236
- $data = "";
1237
-
1238
- if (!isset($m[3]))
1239
- $m[3] = "";
1240
-
1241
- $data = 's:'.strlen(($m[3])).':\"'.($m[3]).'\";';
1242
- //return $this->unescape_quotes($data);
1243
-
1244
- return $data;
1245
- }, $query);
1246
- }
1247
-
1248
- /**
1249
- * Unescape quotes method
1250
- *
1251
- * @param $value
1252
- * @return mixed
1253
- */
1254
- private function unescape_quotes($value) {
1255
- return str_replace('\"', '"', $value);
1256
- }
1257
-
1258
- /**
1259
- * Unescape mysql method
1260
- *
1261
- * @param $value
1262
- * @return mixed
1263
- */
1264
- private function unescape_mysql($value) {
1265
- return str_replace(array("\\\\", "\\0", "\\n", "\\r", "\Z", "\'", '\"'),
1266
- array("\\", "\0", "\n", "\r", "\x1a", "'", '"'),
1267
- $value);
1268
- }
1269
-
1270
- /**
1271
- * Check if string is in serialized format
1272
- *
1273
- * @param $s
1274
- * @return bool
1275
- */
1276
- private function has_serialized($s)
1277
- {
1278
- if (
1279
- stristr($s, '{') !== false &&
1280
- stristr($s, '}') !== false &&
1281
- stristr($s, ';') !== false &&
1282
- stristr($s, ':') !== false
1283
- ) {
1284
- return true;
1285
- } else {
1286
- return false;
1287
- }
1288
-
1289
- }
1290
- }
1291
-
1292
- class Xcloner_Archive_Restore extends Tar {
1293
- public function open($file, $start_byte = 0)
1294
  {
1295
- parent::open($file);
1296
-
1297
- if ($start_byte) {
1298
- fseek($this->fh, $start_byte);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1299
  }
1300
- }
1301
-
 
 
 
 
1302
  /**
1303
- * Read the contents of a TAR archive
1304
  *
1305
- * This function lists the files stored in the archive
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1306
  *
1307
- * The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams.
1308
- * Reopen the file with open() again if you want to do additional operations
1309
  *
1310
- * @throws ArchiveIOException
1311
- * @returns FileInfo[]
1312
  */
1313
- public function contents($files_limit = 0)
1314
  {
1315
- if ($this->closed || !$this->file) {
1316
- throw new ArchiveIOException('Can not read from a closed archive');
 
 
 
 
 
 
 
 
 
 
 
 
 
1317
  }
1318
 
1319
- $files_counter = 0;
1320
- $result = array();
1321
-
1322
- while ($read = $this->readbytes(512)) {
1323
- $header = $this->parseHeader($read);
1324
- if (!is_array($header)) {
1325
- continue;
1326
- }
1327
 
1328
- if($files_limit)
1329
- {
1330
- if(++$files_counter > $files_limit)
1331
- {
1332
- $return['extracted_files'] = $result;
1333
- $return['start'] = ftell($this->fh)-512;
1334
- return $return;
1335
- }
1336
- }
1337
-
1338
- if($header['typeflag'] == 5)
1339
- $header['size'] = 0;
1340
-
1341
- $this->skipbytes(ceil($header['size'] / 512) * 512);
1342
- $result[] = $this->header2fileinfo($header);
1343
  }
 
 
 
1344
 
1345
- $return['extracted_files'] = $result;
1346
-
1347
- $this->close();
1348
- return $return;
1349
- }
1350
-
1351
- public function extract($outdir, $strip = '', $exclude = '', $include = '', $files_limit = 0)
 
1352
  {
1353
-
1354
- if ($this->closed || !$this->file) {
1355
- throw new ArchiveIOException('Can not read from a closed archive');
 
 
 
1356
  }
 
 
 
1357
 
1358
- $outdir = rtrim($outdir, '/');
1359
- if(!is_dir($outdir))
1360
- @mkdir($outdir, 0755, true);
1361
- else
1362
- @chmod($outdir, 0777);
1363
-
1364
- //@mkdir($outdir, 0777, true);
1365
-
1366
- if (!is_dir($outdir)) {
1367
- throw new ArchiveIOException("Could not create directory '$outdir'");
 
 
 
 
 
 
 
 
1368
  }
 
 
 
1369
 
1370
- $files_counter = 0;
1371
- $return = array();
 
 
 
 
 
 
 
 
 
1372
 
1373
- $extracted = array();
1374
- while ($dat = $this->readbytes(512)) {
1375
- // read the file header
1376
- $header = $this->parseHeader($dat);
1377
- if (!is_array($header)) {
1378
- continue;
1379
- }
1380
 
1381
- if($files_limit)
1382
- {
1383
- if(++$files_counter > $files_limit)
1384
- {
1385
- $return['extracted_files'] = $extracted;
1386
- $return['start'] = ftell($this->fh)-512;
1387
- return $return;
1388
- }
1389
- }
1390
-
1391
- $fileinfo = $this->header2fileinfo($header);
1392
-
1393
- // apply strip rules
1394
- $fileinfo->strip($strip);
1395
-
1396
- // skip unwanted files
1397
- if (!strlen($fileinfo->getPath()) || !$fileinfo->match($include, $exclude)) {
1398
- $this->skipbytes(ceil($header['size'] / 512) * 512);
1399
- continue;
1400
- }
1401
 
1402
- // create output directory
1403
- $output = $outdir.'/'.$fileinfo->getPath();
1404
- $directory = ($fileinfo->getIsdir()) ? $output : dirname($output);
1405
- if(!is_dir($directory))
1406
- @mkdir($directory, 0755, true);
1407
- else
1408
- @chmod($directory, 0755);
1409
-
1410
- // extract data
1411
- if (!$fileinfo->getIsdir()) {
1412
- if(file_exists($output))
1413
- unlink($output);
1414
-
1415
- $fp = fopen($output, "wb");
1416
- if (!$fp) {
1417
- throw new ArchiveIOException('Could not open file for writing: '.$output);
1418
  }
1419
 
1420
- $size = floor($header['size'] / 512);
1421
- for ($i = 0; $i < $size; $i++) {
1422
- fwrite($fp, $this->readbytes(512), 512);
1423
- }
1424
- if (($header['size'] % 512) != 0) {
1425
- fwrite($fp, $this->readbytes(512), $header['size'] % 512);
 
 
 
 
 
 
1426
  }
1427
 
1428
- fclose($fp);
1429
- touch($output, $fileinfo->getMtime());
1430
- chmod($output, $fileinfo->getMode());
1431
- } else {
1432
- //$this->skipbytes(ceil($header['size'] / 512) * 512); // the size is usually 0 for directories
1433
- $this->skipbytes(ceil(0 / 512) * 512); // the size is usually 0 for directories
1434
  }
 
 
 
 
1435
 
1436
- $extracted[] = $fileinfo;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1437
  }
 
 
 
1438
 
1439
- $this->close();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1440
 
1441
- $return['extracted_files'] = $extracted;
 
 
 
 
 
 
 
 
 
1442
 
1443
- return $return;
 
 
 
 
 
 
 
 
 
 
 
 
1444
  }
1445
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
 
3
+ if (!defined('AUTH_KEY')) {
4
+ define('AUTH_KEY', '');
 
5
  }
6
 
7
+ if (!defined("DS")) {
8
+ define("DS", DIRECTORY_SEPARATOR);
 
9
  }
10
 
11
+ if (!defined('XCLONER_PLUGIN_ACCESS') || XCLONER_PLUGIN_ACCESS != 1) {
12
+ if (!AUTH_KEY) {
13
+ Xcloner_Restore::send_response("404", "Could not run restore script, AUTH_KEY not set! Your should not access this script directly, it's url should go inside the XCloner Restore area from where you downloaded this script.");
14
+ exit;
15
+ }
16
+
17
+ if (!isset($_REQUEST['hash'])) {
18
+ Xcloner_Restore::send_response("404", "Could not run restore script directly. Enter the URL above in the `Restore Backup` area of XCloner and click `Check Connection`.");
19
+ exit;
20
+ }
21
+
22
+ if ($_REQUEST['hash'] != AUTH_KEY) {
23
+ Xcloner_Restore::send_response("404", "Could not run restore script, AUTH_KEY doesn't match the sent HASH. Please replace the restore script on the remote/target host with a new copy downloaded from the local site and try again.");
24
+ exit;
25
+ }
 
 
 
 
26
  }
27
 
28
  //check minimum PHP version
29
+ if (version_compare(phpversion(), Xcloner_Restore::xcloner_minimum_version, '<')) {
30
+ Xcloner_Restore::send_response(500, sprintf(("XCloner requires minimum PHP version %s in order to run correctly. We have detected your version as %s"), Xcloner_Restore::xcloner_minimum_version, phpversion()));
31
+ exit;
 
 
32
  }
33
 
34
+ $vendor_source_1 = dirname(__DIR__).DS.'vendor'.DS.'autoload.php';
35
+ $vendor_source_2 = __DIR__.DS.'vendor'.DS.'autoload.php';
36
 
37
+ if (file_exists($vendor_source_1)) {
38
+ require_once($vendor_source_1);
39
+ } elseif (file_exists($vendor_source_2)) {
40
+ require_once($vendor_source_2);
41
+ } elseif (file_exists("vendor.phar") and extension_loaded('phar')) {
42
+ require_once(__DIR__.DS."vendor.phar");
43
+ } else {
44
+
45
+ if(!file_exists("vendor.phar")) {
46
+ Xcloner_Restore::send_response("500", "Please upload the vendor.phar file as well!");
47
+ exit;
48
+ }
49
+
50
+ Xcloner_Restore::send_response("500", "Please enable PHP Phar module support or run `composer require watchfulli/xcloner-core:dev-restore` in the same directory as xcloner_restore.php!");
51
+ exit;
 
 
 
 
52
  }
53
 
54
 
64
  use Monolog\Logger;
65
  use Monolog\Handler\StreamHandler;
66
 
67
+ use watchfulli\XClonerCore\Xcloner_Archive;
68
 
69
  //do not modify below
70
  $that = "";
71
+ if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS) {
72
+ $that = $this;
 
 
 
 
 
 
 
 
 
73
  }
74
 
75
+ /**
76
+ *Xcloner_Restore Class
77
+ */
78
  class Xcloner_Restore
79
  {
80
+ const xcloner_minimum_version = "5.4.0";
81
+
82
+ private $backup_archive_extensions = array("zip", "tar", "tgz", "tar.gz", "gz", "csv");
83
+ private $process_files_limit = 150;
84
+ private $process_files_limit_list = 350;
85
+ private $process_mysql_records_limit = 250;
86
+ private $adapter;
87
+ private $filesystem;
88
+ private $logger;
89
+ private $backup_storage_dir;
90
+ private $parent_api;
91
+
92
+ private $target_adapter;
93
+ private $target_filesystem;
94
+
95
+ /**
96
+ * Xcloner_Restore constructor.
97
+ * @param string $parent_api
98
+ * @throws Exception
99
+ */
100
+ public function __construct($parent_api = "")
101
+ {
102
+ register_shutdown_function(array($this, 'exception_handler'));
103
+
104
+ if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS) {
105
+ $xcloner_settings = new watchfulli\XClonerCore\XCloner_Settings($parent_api);
106
+ $dir = $xcloner_settings->get_xcloner_store_path();
107
+ }
108
+
109
+ if (!isset($dir) || !$dir) {
110
+ $dir = dirname(__FILE__);
111
+ }
112
+
113
+ $this->parent_api = $parent_api;
114
+
115
+ $this->backup_storage_dir = $dir;
116
+
117
+ $this->adapter = new Local($dir, LOCK_EX, 'SKIP_LINKS');
118
+ $this->filesystem = new Filesystem($this->adapter, new Config([
119
+ 'disable_asserts' => true,
120
+ ]));
121
+
122
+ $this->logger = new Logger('xcloner_restore');
123
+
124
+ $logger_path = $this->get_logger_filename();
125
+
126
+ if (!is_writeable($logger_path) and !touch($logger_path)) {
127
+ $logger_path = "php://stderr";
128
+ }
129
+
130
+ $this->logger->pushHandler(new StreamHandler($logger_path, Logger::DEBUG));
131
+
132
+ if (isset($_POST['API_ID'])) {
133
+ $this->logger->info("Processing ajax request ID ".substr(filter_input(INPUT_POST, 'API_ID', FILTER_SANITIZE_STRING), 0, 15));
134
+ }
135
+ }
136
+
137
+ /**
138
+ * Exception handler method
139
+ */
140
+ public function exception_handler()
141
+ {
142
+ $error = error_get_last();
143
+
144
+ if ($error['type'] and $this->logger) {
145
+ $this->logger->info($this->friendly_error_type($error['type']).": ".var_export($error, true));
146
+ }
147
+ }
148
+
149
+ /**
150
+ * @param $type
151
+ * @return mixed|string
152
+ */
153
+ private function friendly_error_type($type)
154
+ {
155
+ static $levels = null;
156
+ if ($levels === null) {
157
+ $levels = [];
158
+ foreach (get_defined_constants() as $key=>$value) {
159
+ if (strpos($key, 'E_') !== 0) {
160
+ continue;
161
+ }
162
+ $levels[$value] = $key; //substr($key,2);
163
+ }
164
+ }
165
+ return (isset($levels[$type]) ? $levels[$type] : "Error #{$type}");
166
+ }
167
+
168
+ public function get_logger_filename()
169
+ {
170
+ $filename = $this->backup_storage_dir.DS."xcloner_restore.log";
171
+
172
+ return $filename;
173
+ }
174
+
175
+ /**
176
+ * Init method
177
+ *
178
+ * @return mixed|void
179
+ * @throws Exception
180
+ */
181
+ public function init()
182
+ {
183
+ if (isset($_POST['xcloner_action']) and $_POST['xcloner_action']) {
184
+ $method = filter_input(INPUT_POST, 'xcloner_action', FILTER_SANITIZE_STRING);
185
+
186
+ //$method = "list_backup_archives";
187
+
188
+ $method .= "_action";
189
+
190
+ if (method_exists($this, $method)) {
191
+ $this->logger->debug(sprintf('Starting action %s', $method));
192
+ return call_user_func(array($this, $method));
193
+ } else {
194
+ throw new Exception($method." does not exists");
195
+ }
196
+ }
197
+
198
+ return $this->check_system();
199
+ }
200
+
201
+ /**
202
+ * Write file method
203
+ *
204
+ * @return bool|int
205
+ * @throws Exception
206
+ */
207
+ public function write_file_action()
208
+ {
209
+ if (isset($_POST['file'])) {
210
+ $target_file = filter_input(INPUT_POST, 'file', FILTER_SANITIZE_STRING);
211
+
212
+ if (!$_POST['start']) {
213
+ $fp = fopen($target_file, "wb+");
214
+ } else {
215
+ $fp = fopen($target_file, "ab+");
216
+ }
217
+
218
+ if (!$fp) {
219
+ throw new Exception("Unable to open $target_file file for writing");
220
+ }
221
+
222
+ fseek($fp, $_POST['start']);
223
+
224
+ if (isset($_FILES['blob'])) {
225
+ $this->logger->debug(sprintf('Writing %s bytes to file %s starting position %s using FILES blob', filesize($_FILES['blob']['tmp_name']), $target_file, $_POST['start']));
226
+
227
+ $blob = file_get_contents($_FILES['blob']['tmp_name']);
228
+
229
+ if (!$bytes_written = fwrite($fp, $blob)) {
230
+ throw new Exception("Unable to write data to file $target_file");
231
+ }
232
+
233
+ try {
234
+ unlink($_FILES['blob']['tmp_name']);
235
+ } catch (Exception $e) {
236
+ //silent message
237
+ }
238
+ } elseif (isset($_POST['blob'])) {
239
+ $this->logger->debug(sprintf('Writing %s bytes to file %s starting position %s using POST blob', strlen($_POST['blob']), $target_file, $_POST['start']));
240
+
241
+ $blob = $_POST['blob'];
242
+
243
+ if (!$bytes_written = fwrite($fp, $blob)) {
244
+ throw new Exception("Unable to write data to file $target_file");
245
+ }
246
+ } else {
247
+ throw new Exception("Upload failed, did not receive any binary data");
248
+ }
249
+
250
+ fclose($fp);
251
+ }
252
+
253
+ return $bytes_written;
254
+ }
255
+
256
+ /**
257
+ * Connect to mysql server method
258
+ *
259
+ * @param $remote_mysql_host
260
+ * @param $remote_mysql_user
261
+ * @param $remote_mysql_pass
262
+ * @param $remote_mysql_db
263
+ * @return mysqli
264
+ * @throws Exception
265
+ */
266
+ public function mysql_connect($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db)
267
+ {
268
+ $this->logger->info(sprintf('Connecting to mysql database %s with %s@%s', $remote_mysql_db, $remote_mysql_user, $remote_mysql_host));
269
+
270
+ $mysqli = new mysqli($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
271
+
272
+ if ($mysqli->connect_error) {
273
+ throw new Exception('Connect Error ('.$mysqli->connect_errno.') '
274
+ . $mysqli->connect_error);
275
+ }
276
+
277
+ $mysqli->query("SET sql_mode='';");
278
+ $mysqli->query("SET foreign_key_checks = 0;");
279
+ if (isset($_REQUEST['charset_of_file']) and $_REQUEST['charset_of_file']) {
280
+ $mysqli->query("SET NAMES ".$_REQUEST['charset_of_file']."");
281
+ } else {
282
+ $mysqli->query("SET NAMES utf8;");
283
+ }
284
+
285
+ return $mysqli;
286
+ }
287
+
288
+ /**
289
+ * Restore mysql backup file
290
+ *
291
+ * @throws Exception
292
+ */
293
+ public function restore_mysql_backup_action()
294
+ {
295
+ $mysqldump_file = filter_input(INPUT_POST, 'mysqldump_file', FILTER_SANITIZE_STRING);
296
+ $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
297
+ $remote_mysql_user = filter_input(INPUT_POST, 'remote_mysql_user', FILTER_SANITIZE_STRING);
298
+ $remote_mysql_pass = filter_input(INPUT_POST, 'remote_mysql_pass', FILTER_SANITIZE_STRING);
299
+ $remote_mysql_db = filter_input(INPUT_POST, 'remote_mysql_db', FILTER_SANITIZE_STRING);
300
+ $remote_mysql_host = filter_input(INPUT_POST, 'remote_mysql_host', FILTER_SANITIZE_STRING);
301
+ $execute_query = trim(stripslashes($_POST['query']));
302
+ $error_line = filter_input(INPUT_POST, 'error_line', FILTER_SANITIZE_NUMBER_INT);
303
+ $start = filter_input(INPUT_POST, 'start', FILTER_SANITIZE_NUMBER_INT);
304
+
305
+ $wp_home_url = filter_input(INPUT_POST, 'wp_home_url', FILTER_SANITIZE_STRING);
306
+ $remote_restore_url = filter_input(INPUT_POST, 'remote_restore_url', FILTER_SANITIZE_STRING);
307
+
308
+ $wp_site_url = filter_input(INPUT_POST, 'wp_site_url', FILTER_SANITIZE_STRING);
309
+ $restore_site_url = filter_input(INPUT_POST, 'restore_site_url', FILTER_SANITIZE_STRING);
310
+
311
+ $mysql_backup_file = $remote_path.DS.$mysqldump_file;
312
+
313
+ if (!file_exists($mysql_backup_file)) {
314
+ throw new Exception(sprintf("Mysql backup file %s does not exists", $mysql_backup_file));
315
+ }
316
+
317
+
318
+ /*if(defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS)
319
+ {
320
+ global $wpdb;
321
+ //$mysqli = $this->parent_api->get_xcloner_container()->get_xcloner_database();
322
+ $remote_mysql_host = $wpdb->dbhost;
323
+ $remote_mysql_user = $wpdb->dbuser;
324
+ $remote_mysql_pass = $wpdb->dbpassword;
325
+ $remote_mysql_db = $wpdb->dbname;
326
+ }*/
327
+ {
328
+ $mysqli = $this->mysql_connect($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
329
+ }
330
+
331
+ $line_count = 0;
332
+ $query = "";
333
+ $return = array();
334
+ $return['finished'] = 1;
335
+ $return['backup_file'] = $mysqldump_file;
336
+ $return['backup_size'] = filesize($mysql_backup_file);
337
+
338
+ $fp = fopen($mysql_backup_file, "r");
339
+ if ($fp) {
340
+ $this->logger->info(sprintf("Opening mysql dump file %s at position %s.", $mysql_backup_file, $start));
341
+ fseek($fp, $start);
342
+ while ($line_count <= $this->process_mysql_records_limit and ($line = fgets($fp)) !== false) {
343
+ // process the line read.
344
+
345
+ //check if line is comment
346
+ if (substr($line, 0, 1) == "#") {
347
+ continue;
348
+ }
349
+
350
+ //check if line is empty
351
+ if ($line == "\n" or trim($line) == "") {
352
+ continue;
353
+ }
354
+
355
+ //exclude usermeta info for local restores to fix potential session logout
 
 
 
356
  if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS) {
357
  if (strpos($line, "_usermeta`") !== false) {
358
  $line = str_replace("_usermeta`", "_usermeta2`", $line);
359
  }
360
  }
361
 
362
+ if (substr($line, strlen($line) - 2, strlen($line)) == ";\n") {
363
+ $query .= $line;
364
+ } else {
365
+ $query .= $line;
366
+ continue;
367
+ }
368
+
369
+ if ($execute_query) {
370
+ $query = (($execute_query));
371
+ $execute_query = "";
372
+ }
373
+
374
+ //Doing serialized url replace here
375
+
376
+ if ($wp_site_url and $wp_home_url and strlen($wp_home_url) < strlen($wp_site_url)) {
377
+ list($wp_home_url, $wp_site_url) = array($wp_site_url, $wp_home_url);
378
+ list($remote_restore_url, $restore_site_url) = array($restore_site_url, $remote_restore_url);
379
+ }
380
+
381
+ if ($wp_home_url and $remote_restore_url and strpos($query, $wp_home_url) !== false) {
382
+ $query = $this->url_replace($wp_home_url, $remote_restore_url, $query);
383
+ }
384
+
385
+ if ($wp_site_url and $restore_site_url and strpos($query, $wp_site_url) !== false) {
386
+ $query = $this->url_replace($wp_site_url, $restore_site_url, $query);
387
+ }
388
+
389
+ if (!$mysqli->query($query) && !stristr($mysqli->error, "Duplicate entry")) {
390
+ //$return['error_line'] = $line_count;
391
+ $return['start'] = ftell($fp) - strlen($line);
392
+ $return['query_error'] = true;
393
+ $return['query'] = $query;
394
+ $return['message'] = sprintf("Mysql Error: %s\n", $mysqli->error);
395
+
396
+ $this->logger->error($return['message']);
397
+
398
+ $this->send_response(418, $return);
399
+ //throw new Exception(sprintf("Mysql Error: %s\n Mysql Query: %s", $mysqli->error, $query));
400
+ }
401
+ //else echo $line;
402
+
403
+ $query = "";
404
+
405
+ $line_count++;
406
+ }
407
+
408
+ $return['start'] = ftell($fp);
409
+
410
+ $this->logger->info(sprintf("Executed %s queries of size %s bytes", $line_count, ($return['start'] - $start)));
411
+
412
+ if (!feof($fp)) {
413
+ $return['finished'] = 0;
414
+ } else {
415
+ $this->logger->info(sprintf("Mysql Import Done."));
416
+ }
417
+
418
+ fclose($fp);
419
+ }
420
+
421
+ $this->send_response(200, $return);
422
+ }
423
+
424
+ /**
425
+ * Url replace method inside database backup file
426
+ *
427
+ * @param $search
428
+ * @param $replace
429
+ * @param $query
430
+ * @return mixed|string|string[]|null
431
+ */
432
+ private function url_replace($search, $replace, $query)
433
+ {
434
+ $this->logger->info(sprintf("Doing url replace on query with length %s", strlen($query)), array("QUERY_REPLACE"));
435
+ $query = str_replace($search, $replace, $query);
436
+ $original_query = $query;
437
+
438
+ if ($this->has_serialized($query)) {
439
+ $this->logger->info(sprintf("Query contains serialized data, doing serialized size fix"), array("QUERY_REPLACE"));
440
+ $query = $this->do_serialized_fix($query);
441
+
442
+ if (!$query) {
443
+ $this->logger->info(sprintf("Serialization probably failed here..."), array("QUERY_REPLACE"));
444
+ $query = $original_query;
445
+ }
446
+ }
447
+ $this->logger->info(sprintf("New query length is %s", strlen($query)), array("QUERY_REPLACE"));
448
+
449
+ return $query;
450
+ }
451
+
452
+ /**
453
+ * List backup files method
454
+ *
455
+ * @throws \League\Flysystem\FileNotFoundException
456
+ */
457
+ public function list_backup_files_action()
458
+ {
459
+ $backup_parts = array();
460
+
461
+ $source_backup_file = filter_input(INPUT_POST, 'file', FILTER_SANITIZE_STRING);
462
+ $start = (int)filter_input(INPUT_POST, 'start', FILTER_SANITIZE_STRING);
463
+ $return['part'] = (int)filter_input(INPUT_POST, 'part', FILTER_SANITIZE_STRING);
464
+
465
+ $backup_file = $source_backup_file;
466
+
467
+ if ($this->is_multipart($backup_file)) {
468
+ $backup_parts = $this->get_multipart_files($backup_file);
469
+ $backup_file = $backup_parts[$return['part']];
470
+ }
471
+
472
+ if ($this->is_encrypted_file($backup_file)) {
473
+ $return['error'] = true;
474
+ $return['message'] = "Backup archive is encrypted, please decrypt it first before you can list it's content.";
475
+ $this->send_response(200, $return);
476
+ }
477
+
478
+ try {
479
+ $tar = new Xcloner_Archive_Restore();
480
+ $tar->open($this->backup_storage_dir.DS.$backup_file, $start);
481
+
482
+ $data = $tar->contents($this->process_files_limit_list);
483
+ } catch (Exception $e) {
484
+ $return['error'] = true;
485
+ $return['message'] = $e->getMessage();
486
+ $this->send_response(200, $return);
487
+ }
488
+
489
+ $return['files'] = array();
490
+ $return['finished'] = 1;
491
+ $return['total_size'] = filesize($this->backup_storage_dir.DS.$backup_file);
492
+ $i = 0;
493
+
494
+ if (isset($data['extracted_files']) and is_array($data['extracted_files'])) {
495
+ foreach ($data['extracted_files'] as $file) {
496
+ $return['files'][$i]['path'] = $file->getPath();
497
+ $return['files'][$i]['size'] = $file->getSize();
498
+ $return['files'][$i]['mtime'] = date("d M,Y H:i", $file->getMtime());
499
+
500
+ $i++;
501
+ }
502
+ }
503
+
504
+ if (isset($data['start'])) {
505
+ $return['start'] = $data['start'];
506
+ $return['finished'] = 0;
507
+ } else {
508
+ if ($this->is_multipart($source_backup_file)) {
509
+ $return['start'] = 0;
510
+
511
+ ++$return['part'];
512
+
513
+ if ($return['part'] < sizeof($backup_parts)) {
514
+ $return['finished'] = 0;
515
+ }
516
+ }
517
+ }
518
+
519
+ $this->send_response(200, $return);
520
+ }
521
+
522
+ /**
523
+ * Finish backup restore method
524
+ *
525
+ * @throws \League\Flysystem\FileNotFoundException
526
+ */
527
+ public function restore_finish_action()
528
+ {
529
+ $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
530
+
531
+ $wp_home_url = filter_input(INPUT_POST, 'wp_home_url', FILTER_SANITIZE_STRING);
532
+ $remote_restore_url = filter_input(INPUT_POST, 'remote_restore_url', FILTER_SANITIZE_STRING);
533
+
534
+ $remote_mysql_user = filter_input(INPUT_POST, 'remote_mysql_user', FILTER_SANITIZE_STRING);
535
+ $remote_mysql_pass = filter_input(INPUT_POST, 'remote_mysql_pass', FILTER_SANITIZE_STRING);
536
+ $remote_mysql_db = filter_input(INPUT_POST, 'remote_mysql_db', FILTER_SANITIZE_STRING);
537
+ $remote_mysql_host = filter_input(INPUT_POST, 'remote_mysql_host', FILTER_SANITIZE_STRING);
538
+
539
+ $update_remote_site_url = filter_input(INPUT_POST, 'update_remote_site_url', FILTER_SANITIZE_NUMBER_INT);
540
+ $delete_restore_script = filter_input(INPUT_POST, 'delete_restore_script', FILTER_SANITIZE_NUMBER_INT);
541
+ $delete_backup_temporary_folder = filter_input(INPUT_POST, 'delete_backup_temporary_folder', FILTER_SANITIZE_NUMBER_INT);
542
+
543
+ if ($update_remote_site_url) {
544
+ $mysqli = $this->mysql_connect($remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
545
+ $this->update_wp_config($remote_path, $remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db);
546
+ $this->update_wp_url($remote_path, $remote_restore_url, $mysqli);
547
+ }
548
+
549
+ if ($delete_backup_temporary_folder) {
550
+ $this->delete_backup_temporary_folder($remote_path);
551
+ }
552
+
553
+ if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS) {
554
+ //fixing usermeta table for local restores
555
+ global $wpdb;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
556
 
557
+ $wpdb->select($remote_mysql_db, $mysqli);
558
+
559
+ $wpdb->hide_errors();
560
+ if ($result = $wpdb->get_var("SELECT count(*) FROM ".$wpdb->prefix."usermeta2")) {
561
+ if ($result > 0) {
562
+ $wpdb->query("DROP TABLE IF EXISTS ".$wpdb->prefix."usermeta_backup");
563
+ $wpdb->query("ALTER TABLE ".$wpdb->prefix."usermeta RENAME TO ".$wpdb->prefix."usermeta_backup");
564
+ $wpdb->query("ALTER TABLE ".$wpdb->prefix."usermeta2 RENAME TO ".$wpdb->prefix."usermeta");
565
+ }
566
+ }
567
+ }
568
+
569
+ if (!defined('XCLONER_PLUGIN_ACCESS') || XCLONER_PLUGIN_ACCESS != 1) {
570
+ if ($delete_restore_script) {
571
+ $this->delete_self();
572
+ }
573
+ }
574
+
575
+ $return = "Restore Process Finished.";
576
+ $this->send_response(200, $return);
577
+ }
578
+
579
+ /**
580
+ * Delete backup temporary folder
581
+ *
582
+ * @param $remote_path
583
+ * @return bool
584
+ */
585
+ private function delete_backup_temporary_folder($remote_path)
586
+ {
587
+ $this->target_adapter = new Local($remote_path, LOCK_EX, 'SKIP_LINKS');
588
+ $this->target_filesystem = new Filesystem($this->target_adapter, new Config([
589
+ 'disable_asserts' => true,
590
+ ]));
591
+
592
+ $mysqldump_list = array();
593
+ $list = $this->target_filesystem->listContents();
594
+
595
+ foreach ($list as $file) {
596
+ $matches = array();
597
+
598
+ if ($file['type'] == "dir") {
599
+ if (preg_match("/xcloner-(\w*)/", $file['basename'], $matches)) {
600
+ $this->logger->info(sprintf('Deleting temporary folder %s', $file['path']));
601
+ $this->target_filesystem->deleteDir($file['path']);
602
+ }
603
+ }
604
+ }
605
+
606
+ return true;
607
+ }
608
+
609
+ /**
610
+ * Delete restore script method
611
+ *
612
+ * @throws \League\Flysystem\FileNotFoundException
613
+ */
614
+ private function delete_self()
615
+ {
616
+ if ($this->filesystem->has("vendor.phar")) {
617
+ $this->logger->info(sprintf('Deleting vendor.phar'));
618
+ $this->filesystem->delete("vendor.phar");
619
+ }
620
+ if ($this->filesystem->has("vendor")) {
621
+ $this->logger->info(sprintf('Deleting vendor folder'));
622
+ $this->filesystem->deleteDir("vendor");
623
+ }
624
+ if ($this->filesystem->has("xcloner_restore.php")) {
625
+ $this->logger->info(sprintf('Deleting xcloner_restore.php'));
626
+ $this->filesystem->delete("xcloner_restore.php");
627
+ }
628
+
629
+ if ($this->filesystem->has("xcloner_restore.log")) {
630
+ $this->logger->info(sprintf('Deleting xcloner_restore.log'));
631
+ $this->filesystem->delete("xcloner_restore.log");
632
+ }
633
+
634
+ if ($this->filesystem->has($this->get_logger_filename())) {
635
+ $this->logger->info(sprintf('Deleting logger file %s', $this->get_logger_filename()));
636
+ $this->filesystem->delete($this->get_logger_filename());
637
+ }
638
+ }
639
+
640
+ /**
641
+ * Update Wordpress url in wp-config.php method
642
+ * @param $wp_path
643
+ * @param $url
644
+ * @param mysqli $mysqli
645
+ * @return bool
646
+ * @throws Exception
647
+ */
648
+ private function update_wp_url($wp_path, $url, $mysqli)
649
+ {
650
+ $wp_config = $wp_path.DS."wp-config.php";
651
+
652
+ $this->logger->info(sprintf('Updating site url to %s', $url));
653
+
654
+ if (file_exists($wp_config)) {
655
+ $config = file_get_contents($wp_config);
656
+ preg_match("/.*table_prefix.*=.*'(.*)'/i", $config, $matches);
657
+ if (isset($matches[1])) {
658
+ $table_prefix = $matches[1];
659
+ } else {
660
+ throw new Exception("Could not load wordpress table prefix from wp-config.php file.");
661
+ }
662
+ } else {
663
+ throw new Exception("Could not update the SITEURL and HOME, wp-config.php file not found");
664
+ }
665
+
666
+ if (!$mysqli->query("update ".$table_prefix."options set option_value='".($url)."' where option_name='home'")) {
667
+ throw new Exception(sprintf("Could not update the HOME option, error: %s\n", $mysqli->error));
668
+ }
669
+
670
+ if (!$mysqli->query("update ".$table_prefix."options set option_value='".($url)."' where option_name='siteurl'")) {
671
+ throw new Exception(sprintf("Could not update the SITEURL option, error: %s\n", $mysqli->error));
672
+ }
673
+
674
+ return true;
675
+ }
676
+
677
+ /**
678
+ * Update local wp-config.php file method
679
+ *
680
+ * @param $remote_path
681
+ * @param $remote_mysql_host
682
+ * @param $remote_mysql_user
683
+ * @param $remote_mysql_pass
684
+ * @param $remote_mysql_db
685
+ * @return string
686
+ * @throws Exception
687
+ */
688
+ private function update_wp_config($remote_path, $remote_mysql_host, $remote_mysql_user, $remote_mysql_pass, $remote_mysql_db)
689
+ {
690
+ $wp_config = $remote_path.DS."wp-config.php";
691
+
692
+ if (!file_exists($wp_config)) {
693
+ throw new Exception("Could not find the wp-config.php in ".$remote_path);
694
+ }
695
+
696
+ $content = file_get_contents($wp_config);
697
+
698
+ $content = preg_replace("/(?<=DB_NAME', ')(.*?)(?='\);)/", $remote_mysql_db, $content);
699
+ $content = preg_replace("/(?<=DB_USER', ')(.*?)(?='\);)/", $remote_mysql_user, $content);
700
+ $content = preg_replace("/(?<=DB_PASSWORD', ')(.*?)(?='\);)/", $remote_mysql_pass, $content);
701
+ $content = preg_replace("/(?<=DB_HOST', ')(.*?)(?='\);)/", $remote_mysql_host, $content);
702
+
703
+ $file_perms = fileperms($wp_config);
704
+
705
+ chmod($wp_config, 0777);
706
+
707
+ $this->logger->info(sprintf('Updating wp-config.php file with the new mysql details'));
708
+
709
+ if (!file_put_contents($wp_config, $content)) {
710
+ throw new Exception("Could not write updated config data to ".$wp_config);
711
+ }
712
+
713
+ chmod($wp_config, $file_perms);
714
+
715
+ return $wp_config;
716
+ }
717
+
718
+ /**
719
+ * List mysqldump database backup files
720
+ *
721
+ */
722
+ public function list_mysqldump_backups_action()
723
+ {
724
+ $source_backup_file = filter_input(INPUT_POST, 'backup_file', FILTER_SANITIZE_STRING);
725
+ $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
726
+
727
+ $hash = $this->get_hash_from_backup($source_backup_file);
728
+
729
+ $this->target_adapter = new Local($remote_path, LOCK_EX, 'SKIP_LINKS');
730
+ $this->target_filesystem = new Filesystem($this->target_adapter, new Config([
731
+ 'disable_asserts' => true,
732
+ ]));
733
+
734
+ $mysqldump_list = array();
735
+ $list = $this->target_filesystem->listContents();
736
+
737
+ foreach ($list as $file) {
738
+ $matches = array();
739
+
740
+ if ($file['type'] == "dir") {
741
+ if (preg_match("/xcloner-(\w*)/", $file['basename'], $matches)) {
742
+ $files = $this->target_filesystem->listContents($file['basename']);
743
+ foreach ($files as $file) {
744
+ if ($file['extension'] == "sql") {
745
+ $this->logger->info(sprintf('Found %s mysql backup file', $file['path']));
746
+ $mysqldump_list[$file['path']]['path'] = $file['path'];
747
+ $mysqldump_list[$file['path']]['size'] = $file['size'];
748
+ $mysqldump_list[$file['path']]['timestamp'] = date("d M,Y H:i", $file['timestamp']);
749
+
750
+ if ($hash and $hash == $matches[1]) {
751
+ $mysqldump_list[$file['path']]['selected'] = "selected";
752
+ } else {
753
+ $mysqldump_list[$file['path']]['selected'] = "";
754
+ }
755
+ }
756
+ }
757
+ }
758
+ }
759
+ }
760
+
761
+ $this->sort_by($mysqldump_list, 'timestamp', 'desc');
762
+ $return['files'] = $mysqldump_list;
763
+
764
+ $this->send_response(200, $return);
765
+ }
766
+
767
+ /**
768
+ * Get backup hash method
769
+ *
770
+ * @param $backup_file
771
+ * @return false|string
772
+ */
773
+ private function get_hash_from_backup($backup_file)
774
+ {
775
+ if (!$backup_file) {
776
+ return false;
777
+ }
778
+
779
+ $result = preg_match("/-(\w*)./", substr($backup_file, strlen($backup_file) - 10, strlen($backup_file)), $matches);
780
+
781
+ if ($result and isset($matches[1])) {
782
+ return ($matches[1]);
783
+ }
784
+
785
+ return false;
786
+ }
787
+
788
+ /**
789
+ * List backup archives found on local system
790
+ *
791
+ * @throws \League\Flysystem\FileNotFoundException
792
+ */
793
+ public function list_backup_archives_action()
794
+ {
795
+ $local_backup_file = filter_input(INPUT_POST, 'local_backup_file', FILTER_SANITIZE_STRING);
796
+ $list = $this->filesystem->listContents();
797
+
798
+ $backup_files = array();
799
+ $parents = array();
800
+
801
+ foreach ($list as $file_info) {
802
+ $data = array();
803
+
804
+ if (isset($file_info['extension']) and $file_info['extension'] == "csv") {
805
+ $lines = explode(PHP_EOL, $this->filesystem->read($file_info['path']));
806
+ foreach ($lines as $line) {
807
+ if ($line) {
808
+ $data = str_getcsv($line);
809
+ if (is_array($data)) {
810
+ $parents[$data[0]] = $file_info['path'];
811
+ $file_info['childs'][] = $data;
812
+ $file_info['size'] += $data[2];
813
+ }
814
+ }
815
+ }
816
+ }
817
+
818
+ if ($file_info['type'] == 'file' and isset($file_info['extension']) and in_array($file_info['extension'], $this->backup_archive_extensions)) {
819
+ $backup_files[$file_info['path']] = $file_info;
820
+ }
821
+ }
822
+
823
+ $new_list = array();
824
+
825
+ foreach ($backup_files as $key=>$file_info) {
826
+ if (isset($parents[$file_info['path']])) {
827
+ $backup_files[$key]['parent'] = $parents[$file_info['path']];
828
+ } else {
829
+ if ($local_backup_file and ($file_info['basename'] == $local_backup_file)) {
830
+ $file_info['selected'] = 'selected';
831
+ }
832
+
833
+ $this->logger->info(sprintf('Found %s backup file', $file_info['path']));
834
+
835
+ $new_list[$key] = $file_info;
836
+ }
837
+ }
838
+
839
+ $this->sort_by($new_list, "timestamp", "desc");
840
+
841
+ $return['files'] = $new_list;
842
+
843
+ $this->send_response(200, $return);
844
+ }
845
+
846
+ /**
847
+ * Restore backup archive to local path
848
+ *
849
+ * @throws \League\Flysystem\FileNotFoundException
850
+ * @throws \splitbrain\PHPArchive\ArchiveIOException
851
+ */
852
+ public function restore_backup_to_path_action()
853
+ {
854
+ $source_backup_file = filter_input(INPUT_POST, 'backup_file', FILTER_SANITIZE_STRING);
855
+ $remote_path = filter_input(INPUT_POST, 'remote_path', FILTER_SANITIZE_STRING);
856
+ $include_filter_files = filter_input(INPUT_POST, 'filter_files', FILTER_SANITIZE_STRING);
857
+ $exclude_filter_files = "";
858
+ $start = filter_input(INPUT_POST, 'start', FILTER_SANITIZE_NUMBER_INT);
859
+ $return['part'] = (int)filter_input(INPUT_POST, 'part', FILTER_SANITIZE_NUMBER_INT);
860
+ $return['processed'] = (int)filter_input(INPUT_POST, 'processed', FILTER_SANITIZE_NUMBER_INT);
861
+
862
+ $this->target_adapter = new Local($remote_path, LOCK_EX, 'SKIP_LINKS');
863
+ $this->target_filesystem = new Filesystem($this->target_adapter, new Config([
864
+ 'disable_asserts' => true,
865
+ ]));
866
+
867
+ $backup_file = $source_backup_file;
868
+
869
+ $return['finished'] = 1;
870
+ $return['extracted_files'] = array();
871
+ $return['total_size'] = $this->get_backup_size($backup_file);
872
+
873
+ $backup_archive = new Xcloner_Archive_Restore();
874
+ if ($this->is_multipart($backup_file)) {
875
+ if (!$return['part']) {
876
+ $return['processed'] += $this->filesystem->getSize($backup_file);
877
+ }
878
+
879
+ $backup_parts = $this->get_multipart_files($backup_file);
880
+ $backup_file = $backup_parts[$return['part']];
881
+ }
882
+
883
+ if ($this->is_encrypted_file($backup_file)) {
884
+ $message = sprintf('Backup file %s seems encrypted, please Decrypt it first from your Manage Backups panel.', $backup_file);
885
  $this->logger->error($message);
886
  $this->send_response(500, $message);
887
  return;
888
  }
889
+
890
+ $this->logger->info(sprintf('Opening backup archive %s at position %s', $backup_file, $start));
891
+ $backup_archive->open($this->backup_storage_dir.DS.$backup_file, $start);
892
+
893
+ $data = $backup_archive->extract($remote_path, '', $exclude_filter_files, $include_filter_files, $this->process_files_limit);
894
+
895
+ if (isset($data['extracted_files'])) {
896
+ foreach ($data['extracted_files'] as $spl_fileinfo) {
897
+ $this->logger->info(sprintf('Extracted %s file', $spl_fileinfo->getPath()));
898
+ $return['extracted_files'][] = $spl_fileinfo->getPath()." (".$spl_fileinfo->getSize()." bytes)";
899
+ }
900
+ }
901
+
902
+ if (isset($data['start'])) {
903
+ //if(isset($data['start']) and $data['start'] <= $this->filesystem->getSize($backup_file))
904
+ $return['finished'] = 0;
905
+ $return['start'] = $data['start'];
906
+ } else {
907
+ $return['processed'] += $start;
908
+
909
+ if ($this->is_multipart($source_backup_file)) {
910
+ $return['start'] = 0;
911
+
912
+ ++$return['part'];
913
+
914
+ if ($return['part'] < sizeof($backup_parts)) {
915
+ $return['finished'] = 0;
916
+ }
917
+ }
918
+ }
919
+
920
+ if ($return['finished']) {
921
+ $this->logger->info(sprintf('Done extracting %s', $source_backup_file));
922
+ }
923
+
924
+ $return['backup_file'] = $backup_file;
925
+
926
+ $this->send_response(200, $return);
927
+ }
 
 
 
 
928
 
929
  /**
930
  * Check if provided filename has encrypted suffix
932
  * @param $filename
933
  * @return bool
934
  */
935
+ public function is_encrypted_file($filename)
936
+ {
937
+ $fp = $this->filesystem->readStream($filename);
938
  if (is_resource($fp)) {
939
  $encryption_length = fread($fp, 16);
940
  fclose($fp);
944
  }
945
 
946
  return false;
 
947
  }
948
 
949
+ /**
950
+ * Get current directory method
951
+ */
952
+ public function get_current_directory_action()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
953
  {
954
+ global $wpdb;
955
+
956
+ $restore_script_url = filter_input(INPUT_POST, 'restore_script_url', FILTER_SANITIZE_STRING);
957
+
958
+ $pathinfo = pathinfo(__FILE__);
959
+
960
+ $suffix = "";
961
+ $return['remote_mysql_host'] = "localhost";
962
+ $return['remote_mysql_user'] = "";
963
+ $return['remote_mysql_pass'] = "";
964
+ $return['remote_mysql_db'] = "";
965
+
966
+ if (defined('XCLONER_PLUGIN_ACCESS') && XCLONER_PLUGIN_ACCESS) {
967
+ $return['dir'] = realpath(get_home_path().DS.$suffix);
968
+ $return['restore_script_url'] = get_site_url();
969
+ $return['remote_mysql_host'] = $wpdb->dbhost;
970
+ $return['remote_mysql_user'] = $wpdb->dbuser;
971
+ $return['remote_mysql_pass'] = $wpdb->dbpassword;
972
+ $return['remote_mysql_db'] = $wpdb->dbname;
973
+ } else {
974
+ $return['dir'] = ($pathinfo['dirname']).DS.$suffix;
975
+ $return['restore_script_url'] = str_replace($pathinfo['basename'], "", $restore_script_url).$suffix;
976
  }
977
+
978
+ $this->logger->info(sprintf('Determining current url as %s and path as %s', $return['dir'], $return['restore_script_url']));
979
+
980
+ $this->send_response(200, $return);
981
+ }
982
+
983
  /**
984
+ * Check current filesystem
985
  *
986
+ * @throws Exception
987
+ */
988
+ public function check_system()
989
+ {
990
+ //check if i can write
991
+ $tmp_file = md5(time());
992
+ if (!file_put_contents($tmp_file, "++")) {
993
+ throw new Exception("Could not write to new host");
994
+ }
995
+
996
+ if (!unlink($tmp_file)) {
997
+ throw new Exception("Could not delete temporary file from new host");
998
+ }
999
+
1000
+ $max_upload = $this->return_bytes((ini_get('upload_max_filesize')));
1001
+ $max_post = $this->return_bytes((ini_get('post_max_size')));
1002
+
1003
+ $return['max_upload_size'] = min($max_upload, $max_post); // bytes
1004
+ $return['status'] = true;
1005
+
1006
+ $this->logger->info(sprintf('Current filesystem max upload size is %s bytes', $return['max_upload_size']));
1007
+
1008
+ $this->send_response(200, $return);
1009
+ }
1010
+
1011
+ /**
1012
+ * Return bytes from human readable value
1013
  *
1014
+ * @param string $val
1015
+ * @return int
1016
  *
 
 
1017
  */
1018
+ private function return_bytes($val)
1019
  {
1020
+ $numeric_val = (int)trim($val);
1021
+ $last = strtolower($val[strlen($val) - 1]);
1022
+ switch ($last) {
1023
+ // The 'G' modifier is available since PHP 5.1.0
1024
+ case 'g':
1025
+ //gigabytes
1026
+ $numeric_val *= 1024;
1027
+ // no break
1028
+ case 'm':
1029
+ //megabytes
1030
+ $numeric_val *= 1024;
1031
+ // no break
1032
+ case 'k':
1033
+ //kilobytes
1034
+ $numeric_val *= 1024;
1035
  }
1036
 
1037
+ return $numeric_val;
1038
+ }
 
 
 
 
 
 
1039
 
1040
+ /**
1041
+ * Check if backup archive os multipart
1042
+ *
1043
+ * @param $backup_name
1044
+ * @return bool
1045
+ */
1046
+ public function is_multipart($backup_name)
1047
+ {
1048
+ if (stristr($backup_name, "-multipart")) {
1049
+ return true;
 
 
 
 
 
1050
  }
1051
+
1052
+ return false;
1053
+ }
1054
 
1055
+ /**
1056
+ * Get backup archive size
1057
+ *
1058
+ * @param $backup_name
1059
+ * @return bool|false|int
1060
+ * @throws \League\Flysystem\FileNotFoundException
1061
+ */
1062
+ public function get_backup_size($backup_name)
1063
  {
1064
+ $backup_size = $this->filesystem->getSize($backup_name);
1065
+ if ($this->is_multipart($backup_name)) {
1066
+ $backup_parts = $this->get_multipart_files($backup_name);
1067
+ foreach ($backup_parts as $part_file) {
1068
+ $backup_size += $this->filesystem->getSize($part_file);
1069
+ }
1070
  }
1071
+
1072
+ return $backup_size;
1073
+ }
1074
 
1075
+ /**
1076
+ * Get multipart backup files list
1077
+ * @param $backup_name
1078
+ * @return array
1079
+ * @throws \League\Flysystem\FileNotFoundException
1080
+ */
1081
+ public function get_multipart_files($backup_name)
1082
+ {
1083
+ $files = array();
1084
+
1085
+ if ($this->is_multipart($backup_name)) {
1086
+ $lines = explode(PHP_EOL, $this->filesystem->read($backup_name));
1087
+ foreach ($lines as $line) {
1088
+ if ($line) {
1089
+ $data = str_getcsv($line);
1090
+ $files[] = $data[0];
1091
+ }
1092
+ }
1093
  }
1094
+
1095
+ return $files;
1096
+ }
1097
 
1098
+ /**
1099
+ * Sort_by method
1100
+ *
1101
+ * @param $array
1102
+ * @param string $field
1103
+ * @param string $direction
1104
+ * @return bool
1105
+ */
1106
+ private function sort_by(&$array, $field, $direction = 'asc')
1107
+ {
1108
+ $direction = strtolower($direction);
1109
 
1110
+ usort(
1111
+ $array,
 
 
 
 
 
1112
 
1113
+ /**
1114
+ * @param string $b
1115
+ */
1116
+ function ($a, $b) use ($field, $direction) {
1117
+ $a = $a[$field];
1118
+ $b = $b[$field];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1119
 
1120
+ if ($a == $b) {
1121
+ return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1122
  }
1123
 
1124
+ if ($direction == 'desc') {
1125
+ if ($a > $b) {
1126
+ return -1;
1127
+ } else {
1128
+ return 1;
1129
+ }
1130
+ } else {
1131
+ if ($a < $b) {
1132
+ return -1;
1133
+ } else {
1134
+ return 1;
1135
+ }
1136
  }
1137
 
1138
+ //return ($a.($direction == 'desc' ? '>' : '<').$b) ? -1 : 1;
 
 
 
 
 
1139
  }
1140
+ );
1141
+
1142
+ return true;
1143
+ }
1144
 
1145
+ /**
1146
+ * Send response method
1147
+ *
1148
+ * @param int $status
1149
+ * @param $response
1150
+ */
1151
+ public static function send_response($status = 200, $response)
1152
+ {
1153
+ header("Access-Control-Allow-Origin: *");
1154
+ header("HTTP/1.1 200");
1155
+ header('Content-Type: application/json');
1156
+ $return['status'] = $status;
1157
+ $return['statusText'] = $response;
1158
+
1159
+ if (isset($response['error']) && $response['error']) {
1160
+ $return['statusText'] = $response['message'];
1161
+ $return['error'] = true;
1162
+ } elseif ($status != 200 and $status != 418) {
1163
+ $return['error'] = true;
1164
+ $return['message'] = $response;
1165
  }
1166
+
1167
+ die(json_encode($return));
1168
+ }
1169
 
1170
+ /**
1171
+ * Serialize fix methods below for mysql query lines
1172
+ *
1173
+ * @param $query
1174
+ * @return string
1175
+ */
1176
+
1177
+ public function do_serialized_fix($query)
1178
+ {
1179
+ $query = str_replace(array("\\n", "\\r", "\\'"), array("", "", "\""), ($query));
1180
+
1181
+ return preg_replace_callback('!s:(\d+):([\\\\]?"[\\\\]?"|[\\\\]?"((.*?)[^\\\\])[\\\\]?");!', function ($m) {
1182
+ $data = "";
1183
+
1184
+ if (!isset($m[3])) {
1185
+ $m[3] = "";
1186
+ }
1187
+
1188
+ $data = 's:'.strlen(($m[3])).':\"'.($m[3]).'\";';
1189
+ //return $this->unescape_quotes($data);
1190
+
1191
+ return $data;
1192
+ }, $query);
1193
+ }
1194
 
1195
+ /**
1196
+ * Unescape quotes method
1197
+ *
1198
+ * @param $value
1199
+ * @return mixed
1200
+ */
1201
+ private function unescape_quotes($value)
1202
+ {
1203
+ return str_replace('\"', '"', $value);
1204
+ }
1205
 
1206
+ /**
1207
+ * Unescape mysql method
1208
+ *
1209
+ * @param $value
1210
+ * @return mixed
1211
+ */
1212
+ private function unescape_mysql($value)
1213
+ {
1214
+ return str_replace(
1215
+ array("\\\\", "\\0", "\\n", "\\r", "\Z", "\'", '\"'),
1216
+ array("\\", "\0", "\n", "\r", "\x1a", "'", '"'),
1217
+ $value
1218
+ );
1219
  }
1220
+
1221
+ /**
1222
+ * Check if string is in serialized format
1223
+ *
1224
+ * @param $s
1225
+ * @return bool
1226
+ */
1227
+ private function has_serialized($s)
1228
+ {
1229
+ if (
1230
+ stristr($s, '{') !== false &&
1231
+ stristr($s, '}') !== false &&
1232
+ stristr($s, ';') !== false &&
1233
+ stristr($s, ':') !== false
1234
+ ) {
1235
+ return true;
1236
+ } else {
1237
+ return false;
1238
+ }
1239
+ }
1240
+ }
1241
+
1242
+ /**
1243
+ * Xcloner_Archive_Restore Class
1244
+ */
1245
+ class Xcloner_Archive_Restore extends Xcloner_Archive
1246
+ {
1247
+ public function __construct($archive_name = "") {
1248
+ if (isset($archive_name) && $archive_name) {
1249
+ $this->set_archive_name($archive_name);
1250
+ }
1251
+ }
1252
+
1253
+ }
1254
+
1255
+
1256
+ /** Main Program */
1257
+ $xcloner_restore = new Xcloner_Restore($that);
1258
+
1259
+ try {
1260
+ $return = $xcloner_restore->init();
1261
+ $xcloner_restore->send_response(200, $return);
1262
+ } catch (Exception $e) {
1263
+ $xcloner_restore->send_response(417, $e->getMessage());
1264
+ }
vendor/aws/aws-sdk-php/.changes/3.100.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "PersonalizeRuntime",
5
+ "description": "Amazon Personalize is a machine learning service that makes it easy for developers to create individualized recommendations for customers using their applications."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeBuild",
10
+ "description": "AWS CodeBuild adds support for source version on project level."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CodeCommit",
15
+ "description": "This release adds two merge strategies for merging pull requests: squash and three-way. It also adds functionality for resolving merge conflicts, testing merge outcomes, and for merging branches using one of the three supported merge strategies."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "Personalize",
20
+ "description": "Amazon Personalize is a machine learning service that makes it easy for developers to create individualized recommendations for customers using their applications."
21
+ },
22
+ {
23
+ "type": "feature",
24
+ "category": "PersonalizeEvents",
25
+ "description": "Introducing Amazon Personalize - a machine learning service that makes it easy for developers to create individualized recommendations for customers using their applications."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SageMaker",
5
+ "description": "The default TaskTimeLimitInSeconds of labeling job is increased to 8 hours. Batch Transform introduces a new DataProcessing field which supports input and output filtering and data joining. Training job increases the max allowed input channels from 8 to 20."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServiceCatalog",
5
+ "description": "This release adds a new field named Guidance to update provisioning artifact, this field can be set by the administrator to provide guidance to end users about which provisioning artifacts to use."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.3 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Api",
5
+ "description": "Fix json parse error when extracting header"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElastiCache",
10
+ "description": "This release is to add support for reader endpoint for cluster-mode disabled Amazon ElastiCache for Redis clusters."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GuardDuty",
15
+ "description": "Support for tagging functionality in Create and Get operations for Detector, IP Set, Threat Intel Set, and Finding Filter resources and 3 new tagging APIs: ListTagsForResource, TagResource, and UntagResource."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "G4 instances are Amazon EC2 instances based on NVIDIA T4 GPUs and are designed to provide cost-effective machine learning inference for applications, like image classification, object detection, recommender systems, automated speech recognition, and language translation. G4 instances are also a cost-effective platform for building and running graphics-intensive applications, such as remote graphics workstations, video transcoding, photo-realistic design, and game streaming in the cloud. To get started with G4 instances visit https:\/\/aws.amazon.com\/ec2\/instance-types\/g4."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "AppMesh",
25
+ "description": "This release adds support for AWS Cloud Map as a service discovery method for virtual nodes."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.4 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Personalize",
5
+ "description": "Documentation updates for Amazon Personalize."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppStream",
10
+ "description": "Added 2 new values(WINDOWS_SERVER_2016, WINDOWS_SERVER_2019) for PlatformType enum."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "Correction to enumerations in EC2 client."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudFront",
20
+ "description": "A new datatype in the CloudFront API, AliasICPRecordal, provides the ICP recordal status for CNAMEs associated with distributions. AWS services in China customers must file for an Internet Content Provider (ICP) recordal if they want to serve content publicly on an alternate domain name, also known as a CNAME, that they have added to CloudFront. The status value is returned in the CloudFront response; you cannot configure it yourself. The status is set to APPROVED for all CNAMEs (aliases) in regions outside of China."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.5 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RoboMaker",
5
+ "description": "Add the ServiceUnavailableException (503) into CreateSimulationJob API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Neptune",
10
+ "description": "This release adds a feature to configure Amazon Neptune to publish audit logs to Amazon CloudWatch Logs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ServiceCatalog",
15
+ "description": "Restrict concurrent calls by a single customer account for CreatePortfolioShare and DeletePortfolioShare when sharing\/unsharing to an Organization."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.6 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "You can now launch new 12xlarge, 24xlarge, and metal instance sizes on the Amazon EC2 compute optimized C5 instance types featuring 2nd Gen Intel Xeon Scalable Processors."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ResourceGroupsTaggingAPI",
10
+ "description": "You can use tag policies to help standardize on tags across your organization's resources."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.7 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "EKS",
5
+ "description": "Changing Amazon EKS full service name to Amazon Elastic Kubernetes Service."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.8 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ClientSideMonitoring",
5
+ "description": "Support host configuration for CSM"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IoTEventsData",
10
+ "description": "\"The colon character ':' is now permitted in Detector Model 'key' parameter values."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Glue",
15
+ "description": "Starting today, you can now use workflows in AWS Glue to author directed acyclic graphs (DAGs) of Glue triggers, crawlers and jobs. Workflows enable orchestration of your ETL workloads by building dependencies between Glue entities (triggers, crawlers and jobs). You can visually track status of the different nodes in the workflows on the console making it easier to monitor progress and troubleshoot issues. Also, you can share parameters across entities in the workflow."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ACMPCA",
20
+ "description": "ACM Private CA is launching Root CAs and hierarchy management, a new feature that expands the scope of ACM Private CA from supporting only subordinate issuing CAs, to now include a full CA hierarchy that includes root CAs - the cryptographic root of trust for an organization."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "RDS",
25
+ "description": "This release adds support for RDS storage autoscaling"
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "OpsWorks",
30
+ "description": "Documentation updates for OpsWorks Stacks."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Health",
35
+ "description": "API improvements for the AWS Health service."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.100.9 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IAM",
5
+ "description": "We are making it easier for you to manage your permission guardrails i.e. service control policies by enabling you to retrieve the last timestamp when an AWS service was accessed within an account or AWS Organizations entity."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "KinesisVideoMedia",
10
+ "description": "Documentation updates for Amazon Kinesis Video Streams."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "DeviceFarm",
15
+ "description": "This release includes updated documentation about the default timeout value for test runs and remote access sessions. This release also includes miscellaneous bug fixes for the documentation."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "MediaPackage",
20
+ "description": "Added two new origin endpoint fields for configuring which SCTE-35 messages are treated as advertisements."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.101.0 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SecurityHub",
5
+ "description": "This release includes a new Tags parameter for the EnableSecurityHub operation, and the following new operations: DescribeHub, CreateActionTarget, DeleteActionTarget, DescribeActionTargets, UpdateActionTarget, TagResource, UntagResource, and ListTagsforResource. It removes the operation ListProductSubscribers, and makes Title and Description required attributes of AwsSecurityFinding."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticLoadBalancingv2",
10
+ "description": "This release adds support for UDP on Network Load Balancers"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "FSx",
15
+ "description": "Starting today, you can join your Amazon FSx for Windows File Server file systems to your organization's self-managed Microsoft Active Directory while creating the file system. You can also perform in-place updates of file systems to keep your Active Directory configuration up to date."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "ServiceQuotas",
20
+ "description": "Service Quotas enables you to view and manage your quotas for AWS services from a central location."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ResourceGroupsTaggingAPI",
25
+ "description": "Updated service APIs and documentation."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "ApiGatewayV2",
30
+ "description": "Customers can get information about security policies set on custom domain resources in API Gateway"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "APIGateway",
35
+ "description": "Customers can pick different security policies (TLS version + cipher suite) for custom domains in API Gateway"
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "SSM",
40
+ "description": "AWS Systems Manager now supports deleting a specific version of a SSM Document."
41
+ },
42
+ {
43
+ "type": "feature",
44
+ "category": "ApplicationInsights",
45
+ "description": "CloudWatch Application Insights detects errors and exceptions from logs, including .NET custom application logs, SQL Server logs, IIS logs, and more, and uses a combination of built-in rules and machine learning, such as dynamic baselining, to identify common problems. You can then easily drill into specific issues with CloudWatch Automatic Dashboards that are dynamically generated. These dashboards contain the most recent alarms, a summary of relevant metrics, and log snippets to help you identify root cause."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.101.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "EKS",
5
+ "description": "Changing Amazon EKS full service name to Amazon Elastic Kubernetes Service."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Starting today, you can use Traffic Mirroring to copy network traffic from an elastic network interface of Amazon EC2 instances and then send it to out-of-band security and monitoring appliances for content inspection, threat monitoring, and troubleshooting. These appliances can be deployed as individual instances, or as a fleet of instances behind a Network Load Balancer with a User Datagram Protocol (UDP) listener. Traffic Mirroring supports filters and packet truncation, so that you only extract the traffic of interest to monitor by using monitoring tools of your choice."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.102.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Auto assume credential role using profile in `~\/.aws\/config`"
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "Test",
10
+ "description": "Updated endpoints file with corresponding updated partition tests."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CodeCommit",
15
+ "description": "This release supports better exception handling for merges."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ApiGatewayV2",
20
+ "description": "You can now perform tag operations on ApiGatewayV2 Resources (typically associated with WebSocket APIs)"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.102.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Test",
5
+ "description": "Removed outdated endpoints tests."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "DynamoDB",
10
+ "description": "Documentation updates for dynamodb"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.103.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "EC2InstanceConnect",
5
+ "description": "Amazon EC2 Instance Connect is a simple and secure way to connect to your instances using Secure Shell (SSH). With EC2 Instance Connect, you can control SSH access to your instances using AWS Identity and Access Management (IAM) policies as well as audit connection requests with AWS CloudTrail events. In addition, you can leverage your existing SSH keys or further enhance your security posture by generating one-time use SSH keys each time an authorized user connects."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "WorkSpaces",
10
+ "description": "Added support for the WorkSpaces restore feature and copying WorkSpaces Images across AWS Regions."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Pinpoint",
15
+ "description": "This release includes editorial updates for the Amazon Pinpoint API documentation."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DirectConnect",
20
+ "description": "Tags will now be included in the API responses of all supported resources (Virtual interfaces, Connections, Interconnects and LAGs). You can also add tags while creating these resources."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.103.1 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "WorkSpaces",
5
+ "description": "Minor API fixes for WorkSpaces."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "You can now launch 8xlarge and 16xlarge instance sizes on the general purpose M5 and memory optimized R5 instance types."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AlexaForBusiness",
15
+ "description": "This release allows developers and customers to add SIP addresses and international phone numbers to contacts."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Redshift",
20
+ "description": "ClusterAvailabilityStatus: The availability status of the cluster for queries. Possible values are the following: Available, Unavailable, Maintenance, Modifying, Failed."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.103.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release adds support for specifying a maximum hourly price for all On-Demand and Spot instances in both Spot Fleet and EC2 Fleet."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Organizations",
10
+ "description": "Specifying the tag key and tag value is required for tagging requests."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RDS",
15
+ "description": "This release adds support for RDS DB Cluster major version upgrade "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DocDB",
20
+ "description": "This release provides support for cluster delete protection and the ability to stop and start clusters."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.104.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "ClientSideMonitoring",
5
+ "description": "Added client configuration options for client-side monitoring."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaStore",
10
+ "description": "This release adds support for tagging, untagging, and listing tags for AWS Elemental MediaStore containers."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "AppStream",
15
+ "description": "Adding ImageBuilderName in Fleet API and Documentation updates for AppStream. "
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.104.1 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "AssignPrivateIpAddresses response includes two new fields: AssignedPrivateIpAddresses, NetworkInterfaceId"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SWF",
10
+ "description": "This release adds APIs that allow adding and removing tags to a SWF domain, and viewing tags for a domain. It also enables adding tags when creating a domain."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "S3",
15
+ "description": "Add S3 x-amz-server-side-encryption-context support."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "RDS",
20
+ "description": "This release supports Cross-Account Cloning for Amazon Aurora clusters."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.105.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Api",
5
+ "description": "Added support for unmarshalling modeled exception data returned by services."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "S3",
10
+ "description": "Added support for passing options to presign via createPresignedRequest."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "DynamoDb",
15
+ "description": "Added support configuring data attribute type as 'binary', defaults to 'string'."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CostExplorer",
20
+ "description": "This release introduces a new operation called GetUsageForecast, which allows you to programmatically access AWS Cost Explorer's forecasting engine on usage data (running hours, data transfer, etc)."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.106.0 ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Added support for assuming credential role via web identity token."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Functions",
10
+ "description": "Avoid repeatedly loading compiled JSON."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "WAFRegional",
15
+ "description": "Updated SDK APIs to add tags to WAF Resources: WebACL, Rule, Rulegroup and RateBasedRule. Tags can also be added during creation of these resources."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EFS",
20
+ "description": "EFS customers can now enable Lifecycle Management for all file systems. You can also now select from one of four Lifecycle Management policies (14, 30, 60 and 90 days), to automatically move files that have not been accessed for the period of time defined by the policy, from the EFS Standard storage class to the EFS Infrequent Access (IA) storage class. EFS IA provides price\/performance that is cost-optimized for files that are not accessed every day."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "KinesisVideo",
25
+ "description": "Add \"GET_DASH_STREAMING_SESSION_URL\" as an API name to the GetDataEndpoint API."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "WAF",
30
+ "description": "Updated SDK APIs to add tags to WAF Resources: WebACL, Rule, Rulegroup and RateBasedRule. Tags can also be added during creation of these resources."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Amplify",
35
+ "description": "This release adds webhook APIs and manual deployment APIs for AWS Amplify Console."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "ConfigService",
40
+ "description": "AWS Config now supports a new set of APIs to manage AWS Config rules across your organization in AWS Organizations. Using this capability, you can centrally create, update, and delete AWS Config rules across all accounts in your organization. This capability is particularly useful if you have a need to deploy a common set of AWS Config rules across all accounts. You can also specify accounts where AWS Config rules should not be created. In addition, you can use these APIs from the master account in AWS Organizations to enforce governance by ensuring that the underlying AWS Config rules are not modifiable by your organization member accounts.These APIs work for both managed and custom AWS Config rules. For more information, see Enabling AWS Config Rules Across all Accounts in Your Organization in the AWS Config Developer Guide.The new APIs are available in all commercial AWS Regions where AWS Config and AWS Organizations are supported. For the full list of supported Regions, see AWS Regions and Endpoints in the AWS General Reference. To learn more about AWS Config, visit the AWS Config webpage. To learn more about AWS Organizations, visit the AWS Organizations webpage."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "CloudWatch",
45
+ "description": "This release adds three new APIs (PutAnomalyDetector, DeleteAnomalyDetector, and DescribeAnomalyDetectors) to support the new feature, CloudWatch Anomaly Detection. In addition, PutMetricAlarm and DescribeAlarms APIs are updated to support management of Anomaly Detection based alarms."
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "GameLift",
50
+ "description": "GameLift FlexMatch now supports matchmaking of up to 200 players per game session, and FlexMatch can now automatically backfill your game sessions whenever there is an open slot."
51
+ },
52
+ {
53
+ "type": "api-change",
54
+ "category": "KinesisVideoArchivedMedia",
55
+ "description": "Adds support for the GetDASHStreamingSessionURL API. Also adds support for the Live Replay playback mode of the GetHLSStreamingSessionURL API."
56
+ }
57
+ ]
vendor/aws/aws-sdk-php/.changes/3.106.1 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Credentials",
5
+ "description": "Fixes empty or unknown profile name causing error in default chain."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ServiceCatalog",
10
+ "description": "This release adds support for Parameters in ExecuteProvisionedProductServiceAction and adds functionality to get the default parameter values for a Self-Service Action execution against a Provisioned Product via DescribeServiceActionExecutionParameters"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Glacier",
15
+ "description": "Documentation updates for glacier"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "QuickSight",
20
+ "description": "Amazon QuickSight now supports embedding dashboards for all non-federated QuickSight users. This includes IAM users, AD users and users from the QuickSight user pool. The get-dashboard-embed-url API accepts QUICKSIGHT as identity type with a user ARN to authenticate the embeddable dashboard viewer as a non-federated user."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.0 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudWatchEvents",
5
+ "description": "Adds APIs for partner event sources, partner event buses, and custom event buses. These new features are managed in the EventBridge service."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "EventBridge",
10
+ "description": "Amazon EventBridge is a serverless event bus service that makes it easy to connect your applications with data from a variety of sources, including AWS services, partner applications, and your own applications."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.1 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Test",
5
+ "description": "Add back partition endpoint tests for DynamoDb local endpoints."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Build",
10
+ "description": "Adds API documentation generation for modeled exception error shapes."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ApiGatewayV2",
15
+ "description": "Bug fix (Add tags field to Update Stage , Api and DomainName Responses )"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElasticsearchService",
20
+ "description": "Amazon Elasticsearch Service now supports M5, C5, and R5 instance types."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "RoboMaker",
25
+ "description": "Added Melodic as a supported Robot Software Suite Version"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "IAM",
30
+ "description": "Removed exception that was indicated but never thrown for IAM GetAccessKeyLastUsed API"
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Credentials",
5
+ "description": "Adds retry option for invalid json returned to instance profile credential provider."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ConfigService",
10
+ "description": "This release adds more granularity to the status of an OrganizationConfigRule by adding a new status. It also adds an exception when organization access is denied."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "AutoScaling",
15
+ "description": "Documentation updates for autoscaling"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DatabaseMigrationService",
20
+ "description": "S3 endpoint settings update: 1) Option to append operation column to full-load files. 2) Option to add a commit timestamp column to full-load and cdc files. Updated DescribeAccountAttributes to include UniqueAccountIdentifier."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.3 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Comprehend",
5
+ "description": "Amazon Comprehend now supports multiple entities for custom entity recognition"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "ElastiCache",
10
+ "description": "Updates for Elasticache"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "CodeDeploy",
15
+ "description": "Documentation updates for codedeploy"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ECS",
20
+ "description": "This release of Amazon Elastic Container Service (Amazon ECS) introduces support for cluster settings. Cluster settings specify whether CloudWatch Container Insights is enabled or disabled for the cluster."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.4 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IoTEvents",
5
+ "description": "Adds support for IoT Events, Lambda, SQS and Kinesis Firehose actions."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "SQS",
10
+ "description": "This release updates the information about the availability of FIFO queues and includes miscellaneous fixes."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.5 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Shield",
5
+ "description": "Adding new VectorType (HTTP_Reflection) and related top contributor types to describe WordPress Pingback DDoS attacks."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MQ",
10
+ "description": "Adds support for AWS Key Management Service (KMS) to offer server-side encryption. You can now select your own customer managed CMK, or use an AWS managed CMK in your KMS account."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.6 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SecretsManager",
5
+ "description": "This release increases the maximum allowed size of SecretString or SecretBinary from 7KB to 10KB in the CreateSecret, UpdateSecret, PutSecretValue and GetSecretValue APIs. This release also increases the maximum allowed size of ResourcePolicy from 4KB to 20KB in the GetResourcePolicy and PutResourcePolicy APIs."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "You can now use Maintenance Windows to select a resource group as the target. By selecting a resource group as the target of a Maintenance Window, customers can perform routine tasks across different resources such as Amazon Elastic Compute Cloud (AmazonEC2) instances, Amazon Elastic Block Store (Amazon EBS) volumes, and Amazon Simple Storage Service(Amazon S3) buckets within the same recurring time window."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.7 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release introduces support for split tunnel with AWS Client VPN, and also adds support for opt-in Regions in DescribeRegions API. In addition, customers can now also tag Launch Templates on creation."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Pinpoint",
10
+ "description": "This release adds support for programmatic access to many of the same campaign metrics that are displayed on the Amazon Pinpoint console. You can now use the Amazon Pinpoint API to monitor and assess performance data for campaigns, and integrate metrics data with other reporting tools. We update the metrics data continuously, resulting in a data latency timeframe that is limited to approximately two hours."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Glue",
15
+ "description": "This release provides GlueVersion option for Job APIs and WorkerType option for DevEndpoint APIs. Job APIs enable users to pick specific GlueVersion for a specific job and pin the job to a specific runtime environment. DevEndpoint APIs enable users to pick different WorkerType for memory intensive workload."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "STS",
20
+ "description": "New STS GetAccessKeyInfo API operation that returns the account identifier for the specified access key ID."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.107.8 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "MediaLive",
5
+ "description": "AWS Elemental MediaLive is adding Input Clipping, Immediate Mode Input Switching, and Dynamic Inputs."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECR",
10
+ "description": "This release adds support for immutable image tags."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MediaConvert",
15
+ "description": "AWS Elemental MediaConvert has added several features including support for: audio normalization using ITU BS.1770-3, 1770-4 algorithms, extension of job progress indicators, input cropping rectangle & output position rectangle filters per input, and dual SCC caption mapping to additional codecs and containers. "
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.108.0 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Sts",
5
+ "description": "Added support for STS regional endpoints and corresponding configuration."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConnect",
10
+ "description": "This release adds support for the Zixi pull protocol on outputs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Batch",
15
+ "description": "AWS Batch now supports SDK auto-pagination and Job-level docker devices."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CostExplorer",
20
+ "description": "Adds support for resource optimization recommendations."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CloudWatchLogs",
25
+ "description": "Allow for specifying multiple log groups in an Insights query, and deprecate storedByte field for LogStreams and interleaved field for FilterLogEventsRequest."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "EC2",
30
+ "description": "You can now create EC2 Capacity Reservations using Availability Zone ID or Availability Zone name. You can view usage of Amazon EC2 Capacity Reservations per AWS account."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Glue",
35
+ "description": "This release provides GetJobBookmark and GetJobBookmarks APIs. These APIs enable users to look at specific versions or all versions of the JobBookmark for a specific job. This release also enables resetting the job bookmark to a specific run via an enhancement of the ResetJobBookmark API."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Greengrass",
40
+ "description": "Greengrass OTA service supports openwrt\/aarch64 and openwrt\/armv7l platforms."
41
+ },
42
+ {
43
+ "type": "bugfix",
44
+ "category": "Credentials",
45
+ "description": "Update web identity provider to handle all exceptions."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.108.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeCommit",
5
+ "description": "This release supports better exception handling for merges."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.108.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Polly",
5
+ "description": "Amazon Polly adds support for Neural text-to-speech engine."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Route53",
10
+ "description": "Amazon Route 53 now supports the Middle East (Bahrain) Region (me-south-1) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MediaConvert",
15
+ "description": "MediaConvert adds support for specifying priority (-50 to 50) on jobs submitted to on demand or reserved queues"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.108.3 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "",
5
+ "description": "Added static code analysis using PHPStan to Travis CI configuration."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "STS",
10
+ "description": "Documentation updates for sts"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.108.4 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DataSync",
5
+ "description": "Support VPC endpoints."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IoT",
10
+ "description": "In this release, AWS IoT Device Defender introduces audit mitigation actions that can be applied to audit findings to help mitigate security issues."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "Amazon EC2 now supports a new Spot allocation strategy \"Capacity-optimized\" that fulfills your request using Spot Instance pools that are optimally chosen based on the available Spot capacity."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.108.5 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Batch",
5
+ "description": "Documentation updates for AWS Batch"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.108.6 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ApplicationInsights",
5
+ "description": "CloudWatch Application Insights for .NET and SQL Server now provides integration with AWS Systems Manager OpsCenter. This integration allows you to view and resolve problems and operational issues detected for selected applications."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "OpsWorksCM",
5
+ "description": "This release adds support for Chef Automate 2 specific engine attributes."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeBuild",
10
+ "description": "CodeBuild adds CloudFormation support for SourceCredential"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Glue",
15
+ "description": "You can now use AWS Glue to find matching records across dataset even without identifiers to join on by using the new FindMatches ML Transform. Find related products, places, suppliers, customers, and more by teaching a custom machine learning transformation that you can use to identify matching matching records as part of your analysis, data cleaning, or master data management project by adding the FindMatches transformation to your Glue ETL Jobs. If your problem is more along the lines of deduplication, you can use the FindMatches in much the same way to identify customers who have signed up more than ones, products that have accidentally been added to your product catalog more than once, and so forth. Using the FindMatches MLTransform, you can teach a Transform your definition of a duplicate through examples, and it will use machine learning to identify other potential duplicates in your dataset. As with data integration, you can then use your new Transform in your deduplication projects by adding the FindMatches transformation to your Glue ETL Jobs. This release also contains additional APIs that support AWS Lake Formation."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "LakeFormation",
20
+ "description": "Lake Formation: (New Service) AWS Lake Formation is a fully managed service that makes it easier for customers to build, secure and manage data lakes. AWS Lake Formation simplifies and automates many of the complex manual steps usually required to create data lakes including collecting, cleaning and cataloging data and securely making that data available for analytics and machine learning."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.1 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "",
5
+ "description": "Retry InvalidIdentityToken errors for AssumeRoleWithWebIdentityCredentialProvider"
6
+ },
7
+ {
8
+ "type": "bugfix",
9
+ "category": "Test\\Integ",
10
+ "description": "Add waiter to S3 integration test to prevent failed bucket deletions on cleanup."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MediaConvert",
15
+ "description": "AWS Elemental MediaConvert has added support for multi-DRM SPEKE with CMAF outputs, MP3 ingest, and options for improved video quality. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Redshift",
20
+ "description": "Add expectedNextSnapshotScheduleTime and expectedNextSnapshotScheduleTimeStatus to redshift cluster object."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "GuardDuty",
25
+ "description": "New \"evidence\" field in the finding model to provide evidence information explaining why the finding has been triggered. Currently only threat-intelligence findings have this field. Some documentation updates."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "IoT",
30
+ "description": "This release adds Quality of Service (QoS) support for AWS IoT rules engine republish action."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "LexRuntimeService",
35
+ "description": "Manage Amazon Lex session state using APIs on the client"
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Rekognition",
5
+ "description": "Adding new Emotion, Fear"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CloudWatch",
10
+ "description": "Documentation updates for monitoring"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ApplicationAutoScaling",
15
+ "description": "Documentation updates for Application Auto Scaling"
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "AutoScaling",
20
+ "description": "Amazon EC2 Auto Scaling now supports a new Spot allocation strategy \"capacity-optimized\" that fulfills your request using Spot Instance pools that are optimally chosen based on the available Spot capacity."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppSync",
5
+ "description": "Adds a configuration option for AppSync GraphQL APIs"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.4 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release adds a new API called SendDiagnosticInterrupt, which allows you to send diagnostic interrupts to your EC2 instance."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.5 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeCommit",
5
+ "description": "This release adds an API, BatchGetCommits, that allows retrieval of metadata for multiple commits in an AWS CodeCommit repository."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "StorageGateway",
10
+ "description": "CreateSnapshotFromVolumeRecoveryPoint API supports new parameter: Tags (to be attached to the created resource)"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AppMesh",
15
+ "description": "This release adds support for http header based routing and route prioritization."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Glue",
20
+ "description": "GetJobBookmarks API is withdrawn."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EC2",
25
+ "description": "This release adds an option to use private certificates from AWS Certificate Manager (ACM) to authenticate a Site-to-Site VPN connection's tunnel endpoints and customer gateway device. "
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Athena",
30
+ "description": "This release adds support for querying S3 Requester Pays buckets. Users can enable this feature through their Workgroup settings."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.6 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "This release of Amazon Elastic Container Service (Amazon ECS) introduces support for controlling the usage of swap space on a per-container basis for Linux containers."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "RoboMaker",
10
+ "description": "Two feature release: 1. AWS RoboMaker introduces log-based simulation. Log-based simulation allows you to play back pre-recorded log data such as sensor streams for testing robotic functions like localization, mapping, and object detection. Use the AWS RoboMaker SDK to test your robotic applications. 2. AWS RoboMaker allow customer to setup a robot deployment timeout when CreateDeploymentJob."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EMR",
15
+ "description": "Amazon EMR has introduced an account level configuration called Block Public Access that allows you to block clusters with ports open to traffic from public IP sources (i.e. 0.0.0.0\/0 for IPv4 and ::\/0 for IPv6) from launching. Individual ports or port ranges can be added as exceptions to allow public access."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.7 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CostandUsageReportService",
5
+ "description": "New IAM permission required for editing AWS Cost and Usage Reports - Starting today, you can allow or deny IAM users permission to edit Cost & Usage Reports through the API and the Billing and Cost Management console. To allow users to edit Cost & Usage Reports, ensure that they have 'cur: ModifyReportDefinition' permission. Refer to the technical documentation (https:\/\/docs.aws.amazon.com\/aws-cost-management\/latest\/APIReference\/API_cur_ModifyReportDefinition.html) for additional details."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppMesh",
10
+ "description": "Fix for HttpMethod enum"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.109.8 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SageMaker",
5
+ "description": "Amazon SageMaker introduces Managed Spot Training. Increases the maximum number of metric definitions to 40 for SageMaker Training and Hyperparameter Tuning Jobs. SageMaker Neo adds support for Acer aiSage and Qualcomm QCS605 and QCS603. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AlexaForBusiness",
10
+ "description": "Adding support for optional locale input in CreateProfile and UpdateProfile APIs"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Transfer",
15
+ "description": "New field in response of TestIdentityProvider"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "AppStream",
20
+ "description": "Includes API updates to support streaming through VPC endpoints for image builders and stacks."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.0 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "PersonalizeRuntime",
5
+ "description": "Increased limits on number of items recommended and reranked: The maximum number of results returned from getRecommendations API has been increased to 200. The maximum number of items which can be reranked via getPersonalizedRanking API has been increased to 200."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "ForecastService",
10
+ "description": "Amazon Forecast is a fully managed machine learning service that makes it easy for customers to generate accurate forecasts using their historical time-series data"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElastiCache",
15
+ "description": "ElastiCache extends support for Scale down for Redis Cluster-mode enabled and disabled replication groups "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SageMaker",
20
+ "description": "Amazon SageMaker now supports Amazon EFS and Amazon FSx for Lustre file systems as data sources for training machine learning models. Amazon SageMaker now supports running training jobs on ml.p3dn.24xlarge instance type. This instance type is offered as a limited private preview for certain SageMaker customers. If you are interested in joining the private preview, please reach out to the SageMaker Product Management team via AWS Support.\""
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SQS",
25
+ "description": "This release provides a way to add metadata tags to a queue when it is created. You can use tags to organize and identify your Amazon SQS queues for cost allocation."
26
+ },
27
+ {
28
+ "type": "feature",
29
+ "category": "ForecastQueryService",
30
+ "description": "Amazon Forecast is a fully managed machine learning service that makes it easy for customers to generate accurate forecasts using their historical time-series data"
31
+ },
32
+ {
33
+ "type": "enhancement",
34
+ "category": "Rekognition",
35
+ "description": "Documentation updates for Amazon Rekognition."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.1 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Test\\Integ",
5
+ "description": "Modifies waiter settings for S3 integration test."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DataSync",
10
+ "description": "This release adds support for SMB location type."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RDS",
15
+ "description": "This release allows users to enable RDS Data API while creating Aurora Serverless databases. "
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.10 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "AWS Config now includes the option for marking RemediationConfigurations as automatic, removing the need to call the StartRemediationExecution API. Manual control over resource execution rate is also included, and RemediationConfigurations are now ARN addressable. Exceptions to exclude account resources from being remediated can be configured with the new PutRemediationExceptions, DescribeRemediationExceptions, and DeleteRemediationExceptions APIs."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.11 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "KinesisAnalytics",
5
+ "description": "Documentation updates for kinesisanalytics"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release of EC2 VM Import Export adds support for exporting Amazon Machine Image(AMI)s to a VM file"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaPackageVod",
10
+ "description": "Adds optional Constant Initialization Vector (IV) to HLS Encryption for MediaPackage VOD."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "TranscribeService",
15
+ "description": "Amazon Transcribe - support transcriptions from audio sources in Russian (ru-RU) and Chinese (zh-CN)."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "",
5
+ "description": "Fixes EventParsingIterator example"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SecurityHub",
10
+ "description": "This release resolves an issue with the DescribeHub action, changes the MasterId and InvitationId parameters for AcceptInvitation to Required, and changes the AccountIds parameter for DeleteInvitations and DeclineInvitations to Required."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "This feature adds \"default tier\" to the AWS Systems Manager Parameter Store for parameter creation and update. AWS customers can now set the \"default tier\" to one of the following values: Standard (default), Advanced or Intelligent-Tiering. This allows customers to create advanced parameters or parameters in corresponding tiers with one setting rather than code change to specify parameter tiers."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.4 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Organizations",
5
+ "description": "Documentation updates for organizations"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.5 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SQS",
5
+ "description": "Added support for message system attributes, which currently lets you send AWS X-Ray trace IDs through Amazon SQS."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConvert",
10
+ "description": "This release adds the ability to send a job to an on-demand queue while simulating the performance of a job sent to a reserved queue. Use this setting to estimate the number of reserved transcoding slots (RTS) you need for a reserved queue."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GlobalAccelerator",
15
+ "description": "API Update for AWS Global Accelerator Client IP Preservation"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.6 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ApplicationAutoScaling",
5
+ "description": "With the current release, you can suspend and later resume any of the following scaling actions in Application Auto Scaling: scheduled scaling actions, dynamic scaling in actions, dynamic scaling out actions."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECS",
10
+ "description": "This release of Amazon Elastic Container Service (Amazon ECS) introduces support for including Docker container IDs in the API response when describing and stopping tasks. This enables customers to easily map containers to the tasks they are associated with."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Lambda",
15
+ "description": "Adds a \"MaximumBatchingWindowInSeconds\" parameter to event source mapping api's. Usable by Dynamodb and Kinesis event sources."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElastiCache",
20
+ "description": "Amazon ElastiCache for Redis now supports encryption at rest using customer managed customer master keys (CMKs) in AWS Key Management Service (KMS). Amazon ElastiCache now supports cluster names upto 40 characters for replicationGoups and upto 50 characters for cacheClusters."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CodePipeline",
25
+ "description": "Introducing pipeline execution trigger details in ListPipelineExecutions API."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.7 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "This release of Amazon Elastic Container Service (Amazon ECS) introduces support for modifying the cluster settings for existing clusters, which enables you to toggle whether Container Insights is enabled or not. Support is also introduced for custom log routing using the ECS FireLens integration."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ApiGatewayManagementApi",
10
+ "description": "You can use getConnection to return information about the connection (when it is connected, IP address, etc) and deleteConnection to disconnect the given connection"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MQ",
15
+ "description": "Adds support for updating security groups selection of an Amazon MQ broker."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.8 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "This release of Amazon Elastic Container Service (Amazon ECS) introduces support for attaching Amazon Elastic Inference accelerators to your containers. This enables you to run deep learning inference workloads with hardware acceleration in a more efficient way."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "GameLift",
10
+ "description": "You can now make use of PKI resources to provide more secure connections between your game clients and servers. To learn more, please refer to the public Amazon GameLift documentation."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ResourceGroupsTaggingAPI",
15
+ "description": "Documentation updates for resourcegroupstaggingapi"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.110.9 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "TranscribeService",
5
+ "description": "MediaFormat is now optional for StartTranscriptionJob API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EKS",
10
+ "description": "Amazon EKS DescribeCluster API returns a new OIDC issuer field that can be used to create OIDC identity provider for IAM for Service Accounts feature."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SFN",
15
+ "description": "Added support for new history events"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.111.0 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "QLDB",
5
+ "description": "(New Service) Amazon QLDB is a fully managed ledger database that provides a transparent, immutable, and cryptographically verifiable transaction log owned by a central trusted authority. Amazon QLDB is a new class of serverless database that eliminates the need to engage in the complex development effort of building your own ledger-like applications and it automatically scales to support the demands of your application. Introduces Amazon QLDB API operations needed for managing Amazon QLDB ledgers. This includes the ability to manage Amazon QLDB ledgers, cryptographically verify documents, and export the journal in a ledger."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppStream",
10
+ "description": "IamRoleArn support in CreateFleet, UpdateFleet, CreateImageBuilder APIs"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MarketplaceCommerceAnalytics",
15
+ "description": "Add FDP+FPS (monthly_revenue_field_demonstration_usage + monthly_revenue_flexible_payment_schedule) to Marketplace Commerce Analytics Service"
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "QLDBSession",
20
+ "description": "(New Service) Amazon QLDB is a fully managed ledger database that provides a transparent, immutable, and cryptographically verifiable transaction log owned by a central trusted authority. Amazon QLDB is a new class of serverless database that eliminates the need to engage in the complex development effort of building your own ledger-like applications and it automatically scales to support the demands of your application. Introduces Amazon QLDB API operations needed for interacting with data in Amazon QLDB ledgers."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EC2",
25
+ "description": "This release expands Site-to-Site VPN tunnel options to allow customers to restrict security algorithms and configure timer settings for VPN connections. Customers can specify these new options while creating new VPN connections, or they can modify the tunnel options on existing connections using a new API."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "RoboMaker",
30
+ "description": "Support for Connectivity to Simulation. When you need to interact with the applications in your simulation job, you can connect to your robot application or simulation application with port forwarding. When you configure port forwarding, traffic will be forwarded from the simulation job port to the application port. Port forwarding makes it easy to connect with tools such as ROS Bridge and other tools. This can be useful when you want to debug or run custom tools to interact with your applications. "
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "AppMesh",
35
+ "description": "This release adds support for http retry policies."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.111.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "StorageGateway",
5
+ "description": "The CloudWatchLogGroupARN parameter of the UpdateGatewayInformation API allows for configuring the gateway to use a CloudWatch log-group where Storage Gateway health events will be logged. "
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.111.2 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "SES",
5
+ "description": "Updated API documentation to correct broken links, and to update content based on customer feedback."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "This release adds support for new data fields and log format in VPC flow logs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RDS",
15
+ "description": "This release allows customers to specify a custom parameter group when creating a Read Replica, for DB engines which support this feature."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "MediaConnect",
20
+ "description": "This release adds support for the RIST protocol on sources and outputs."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ConfigService",
25
+ "description": "Adding input validation for the OrganizationConfigRuleName string."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "SFN",
30
+ "description": "Fixing letter case in Map history event details to be small case"
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "WorkMailMessageFlow",
5
+ "description": "This release allows customers to access email messages as they flow to and from Amazon WorkMail."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "ElasticLoadBalancingv2",
10
+ "description": "Documentation updates for elasticloadbalancingv2: This release adds support for TLS SNI on Network Load Balancers "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MediaLive",
15
+ "description": "AWS Elemental MediaLive now supports High Efficiency Video Coding (HEVC) for standard-definition (SD), high-definition (HD), and ultra-high-definition (UHD) encoding with HDR support.Encoding with HEVC offers a number of advantages. While UHD video requires an advanced codec beyond H.264 (AVC), high frame rate (HFR) or High Dynamic Range (HDR) content in HD also benefit from HEVC's advancements. In addition, benefits can be achieved with HD and SD content even if HDR and HFR are not needed."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "Fix for FleetActivityStatus and FleetStateCode enum"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EKS",
5
+ "description": "This release lets customers add tags to an Amazon EKS cluster. These tags can be used to control access to the EKS API for managing the cluster using IAM. The Amazon EKS TagResource API allows customers to associate tags with their cluster. Customers can list tags for a cluster using the ListTagsForResource API and remove tags from a cluster with the UntagResource API. Note: tags are specific to the EKS cluster resource, they do not propagate to other AWS resources used by the cluster."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConvert",
10
+ "description": "AWS Elemental MediaConvert SDK has added support for multi-DRM SPEKE with CMAF outputs, MP3 ingest, and options for improved video quality."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.10 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "This release of Amazon Elastic Container Service (Amazon ECS) removes FirelensConfiguration from the DescribeTask output during the FireLens public preview."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Amplify",
10
+ "description": "This release adds access logs APIs and artifact APIs for AWS Amplify Console."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.11 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "This release adds support for creating a Read Replica with Active Directory domain information. This release updates RDS API to indicate whether an OrderableDBInstanceOption supports Kerberos Authentication."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MQ",
10
+ "description": "Amazon MQ now includes the ability to scale your brokers by changing the host instance type. See the hostInstanceType property of UpdateBrokerInput (https:\/\/docs.aws.amazon.com\/amazon-mq\/latest\/api-reference\/brokers-broker-id.html#brokers-broker-id-model-updatebrokerinput), and pendingHostInstanceType property of DescribeBrokerOutput (https:\/\/docs.aws.amazon.com\/amazon-mq\/latest\/api-reference\/brokers-broker-id.html#brokers-broker-id-model-describebrokeroutput)."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "WAF",
15
+ "description": "Lowering the threshold for Rate Based rule from 2000 to 100."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.12 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DocDB",
5
+ "description": "This release provides support for describe and modify CA certificates."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.13 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lightsail",
5
+ "description": "This release adds support for the automatic snapshots add-on for instances and block storage disks."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.14 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Credentials",
5
+ "description": "Fixed an issue that the credentials by process provider won't cache."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "This release allows customers to purchase regional EC2 RIs on a future date."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticsearchService",
15
+ "description": "Amazon Elasticsearch Service now supports configuring additional options for domain endpoint, such as whether to require HTTPS for all traffic."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "ApplicationAutoScaling",
20
+ "description": "Documentation updates for Application Auto Scaling"
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "DeviceFarm",
25
+ "description": "Documentation updates for devicefarm"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.15 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CognitoIdentityProvider",
5
+ "description": "This release adds ClientMetadata input parameter to multiple Cognito User Pools operations, making this parameter available to the customer configured lambda triggers as applicable. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaPackage",
10
+ "description": "New Harvest Job APIs to export segment-accurate content windows from MediaPackage Origin Endpoints to S3. See https:\/\/docs.aws.amazon.com\/mediapackage\/latest\/ug\/harvest-jobs.html for more info"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "SSM",
15
+ "description": "Documentation updates for Systems Manager \/ StartSession."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.16 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "PinpointEmail",
5
+ "description": "This release of the Amazon Pinpoint Email API introduces support for using and managing message templates."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Firehose",
10
+ "description": "Amazon Kinesis Data Firehose now allows delivering data to Elasticsearch clusters set up in a different AWS account than the Firehose AWS account. For technical documentation, look for ElasticsearchDestinationConfiguration in the Amazon Kinesis Firehose API reference."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Pinpoint",
15
+ "description": "This release of the Amazon Pinpoint API introduces support for using and managing message templates."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DirectConnect",
20
+ "description": "This release adds a service provider field for physical connection creation and provides a list of available partner providers for each Direct Connect location."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Snowball",
25
+ "description": "AWS Snowball Edge now allows you to perform an offline update to the software of your Snowball Edge device when your device is not connected to the internet. Previously, updating your Snowball Edge's software required that the device be connected to the internet or be sent back to AWS. Now, you can keep your Snowball Edge software up to date even if your device(s) cannot connect to the internet, or are required to run in an air-gapped environment. To complete offline updates, download the software update from a client machine with connection to the internet using the AWS Command Line Interface (CLI). Then, have the Snowball Edge device download and install the software update using the Snowball Edge device API. For more information about offline updates, visit the Snowball Edge documentation page."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Glue",
30
+ "description": "AWS Glue now provides ability to use custom certificates for JDBC Connections."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.17 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "EventBridge",
5
+ "description": "Documentation updates for Amazon EventBridge."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Firehose",
10
+ "description": "With this release, you can use Amazon Kinesis Firehose delivery streams to deliver streaming data to Amazon Elasticsearch Service version 7.x clusters. For technical documentation, look for CreateDeliveryStream operation in Amazon Kinesis Firehose API reference."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Organizations",
15
+ "description": "Documentation updates for organizations"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DataSync",
20
+ "description": "Add Sync options to enable\/disable TaskQueueing"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.18 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Kafka",
5
+ "description": "Updated documentation for Amazon Managed Streaming for Kafka service."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElastiCache",
10
+ "description": "Amazon ElastiCache now allows you to apply available service updates on demand to your Memcached and Redis Cache Clusters. Features included: (1) Access to the list of applicable service updates and their priorities. (2) Service update monitoring and regular status updates. (3) Recommended apply-by-dates for scheduling the service updates. (4) Ability to stop and later re-apply updates. For more information, see https:\/\/docs.aws.amazon.com\/AmazonElastiCache\/latest\/mem-ug\/Self-Service-Updates.html and https:\/\/docs.aws.amazon.com\/AmazonElastiCache\/latest\/red-ug\/Self-Service-Updates.html"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MediaConvert",
15
+ "description": "AWS Elemental MediaConvert SDK has added support for Dolby Atmos encoding, up to 36 outputs, accelerated transcoding with frame capture and preferred acceleration feature."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.19 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "FMS",
5
+ "description": "Firewall Manager now supports Amazon VPC security groups, making it easier to configure and manage security groups across multiple accounts from a single place."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "New EC2 M5n, M5dn, R5n, R5dn instances with 100 Gbps network performance and Elastic Fabric Adapter (EFA) for ultra low latency; New A1.metal bare metal instance powered by AWS Graviton Processors"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "IoTAnalytics",
15
+ "description": "Add `completionTime` to API call ListDatasetContents."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "LexRuntimeService",
20
+ "description": "Amazon Lex now supports Session API checkpoints"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "",
5
+ "description": "Respect client region when assuming credential role via web identity token."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Personalize",
10
+ "description": "[Personalize] Adds trainingHours to solutionVersion properties."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Athena",
15
+ "description": "This release adds DataManifestLocation field indicating the location and file name of the data manifest file. Users can get a list of files that the Athena query wrote or intended to write from the manifest file."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "IAM",
20
+ "description": "Documentation updates for iam"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.20 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Greengrass",
5
+ "description": "Greengrass OTA service supports Raspbian\/Armv6l platforms."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.21 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Personalize",
5
+ "description": "AWS Personalize: Adds ability to create a solution version using FULL or UPDATE training mode"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "WorkSpaces",
10
+ "description": "Documentation updates for WorkSpaces"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.22 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "KinesisVideoArchivedMedia",
5
+ "description": "Add ON_DISCONTINUITY mode to the GetHLSStreamingSessionURL API"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.23 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RoboMaker",
5
+ "description": "This release adds support for ROS2 Dashing as a beta feature"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Kafka",
10
+ "description": "AWS MSK has added support for adding brokers to a cluster."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MarketplaceCommerceAnalytics",
15
+ "description": "add 2 more values for the supporting sections - age of past due funds + uncollected funds breakdown"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.24 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "WorkSpaces",
5
+ "description": "Updates Smoke Test"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Batch",
10
+ "description": "Adding support for Compute Environment Allocation Strategies "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RDS",
15
+ "description": "Amazon RDS now supports Amazon RDS on VMware with the introduction of APIs related to Custom Availability Zones and Media installation."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.25 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudWatch",
5
+ "description": "New Period parameter added to MetricDataQuery structure."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.26 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "OpsWorksCM",
5
+ "description": "AWS OpsWorks for Chef Automate (OWCA) now allows customers to use a custom domain and respective certificate, for their AWS OpsWorks For Chef Automate servers. Customers can now provide a CustomDomain, CustomCertificate and CustomPrivateKey in CreateServer API to configure their Chef Automate servers with a custom domain and certificate."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IoTEvents",
10
+ "description": "Add support for new serial evaluation method for events in a detector model."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.27 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Connect",
5
+ "description": "This release adds 4 new APIs ListQueues, ListPhoneNumbers, ListContactFlows, and ListHoursOfOperations, which can be used to programmatically list Queues, PhoneNumbers, ContactFlows, and HoursOfOperations configured for an Amazon Connect instance respectively. You can learn more about the new APIs here: https:\/\/docs.aws.amazon.com\/connect\/latest\/APIReference\/Welcome.html."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "STS",
10
+ "description": "AWS Security Token Service (STS) now supports a regional configuration flag to make the client respect the region without the need for the endpoint parameter. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Polly",
15
+ "description": "Amazon Polly adds new female voices: US Spanish - Lupe and Brazilian Portuguese - Camila; both voices are available in Standard and Neural engine."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.28 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GameLift",
5
+ "description": "Amazon GameLift offers expanded hardware options for game hosting: Custom game builds can use the Amazon Linux 2 operating system, and fleets for both custom builds and Realtime servers can now use C5, M5, and R5 instance types."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppMesh",
10
+ "description": "This release adds support for the gRPC and HTTP\/2 protocols."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "Adds support for the new family of Elastic Inference Accelerators (eia2) for SageMaker Hosting and Notebook Services"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "This release updates CreateFpgaImage to support tagging FPGA images on creation"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Chime",
25
+ "description": "* This release introduces Voice Connector PDX region and defaults previously created Voice Connectors to IAD. You can create Voice Connector Groups and add region specific Voice Connectors to direct telephony traffic across AWS regions in case of regional failures. With this release you can add phone numbers to Voice Connector Groups and can bulk move phone numbers between Voice Connectors, between Voice Connector and Voice Connector Groups and between Voice Connector Groups. Voice Connector now supports additional settings to enable SIP Log capture. This is in addition to the launch of Voice Connector Cloud Watch metrics in this release. This release also supports assigning outbound calling name (CNAM) to AWS account and individual phone numbers assigned to Voice Connectors. * Voice Connector now supports a setting to enable real time audio streaming delivered via Kinesis Audio streams. Please note that recording Amazon Chime Voice Connector calls with this feature maybe be subject to laws or regulations regarding the recording of telephone calls and other electronic communications. AWS Customer and their end users' have the responsibility to comply with all applicable laws regarding the recording, including properly notifying all participants in a recorded session or to a recorded communication that the session or communication is being recorded and obtain their consent."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.29 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECR",
5
+ "description": "This release of Amazon Elastic Container Registry Service (Amazon ECR) introduces support for image scanning. This identifies the software vulnerabilities in the container image based on the Common Vulnerabilities and Exposures (CVE) database."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Transfer",
10
+ "description": "This release adds logical directories support to your AWS SFTP server endpoint, so you can now create logical directory structures mapped to Amazon Simple Storage Service (Amazon S3) bucket paths for users created and stored within the service. Amazon S3 bucket names and paths can now be hidden from AWS SFTP users, providing an additional level of privacy to meet security requirements. You can lock down your SFTP users' access to designated folders (commonly referred to as 'chroot'), and simplify complex folder structures for data distribution through SFTP without replicating files across multiple users."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElastiCache",
15
+ "description": "Amazon ElastiCache adds support for migrating Redis workloads hosted on Amazon EC2 into ElastiCache by syncing the data between the source Redis cluster and target ElastiCache for Redis cluster in real time. For more information, see https:\/\/docs.aws.amazon.com\/AmazonElastiCache\/latest\/red-ug\/migrate-to-elasticache.html."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RAM",
5
+ "description": "AWS RAM provides a new ListPendingInvitationResources API action that lists the resources in a resource share that is shared with you but that the invitation is still pending for"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "WAFRegional",
10
+ "description": "Lowering the threshold for Rate Based rule from 2000 to 100."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "APIGateway",
15
+ "description": "Amazon API Gateway simplifies accessing PRIVATE APIs by allowing you to associate one or more Amazon Virtual Private Cloud (VPC) Endpoints to a private API. API Gateway will create and manage DNS alias records necessary for easily invoking the private APIs. With this feature, you can leverage private APIs in web applications hosted within your VPCs."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.30 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "S3",
5
+ "description": "Adding support in SelectObjectContent for scanning a portion of an object specified by a scan range."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.31 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppStream",
5
+ "description": "Adds support for providing domain names that can embed streaming sessions"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Cloud9",
10
+ "description": "Added CREATING and CREATE_FAILED environment lifecycle statuses. "
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.32 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElastiCache",
5
+ "description": "Amazon ElastiCache for Redis 5.0.5 now allows you to modify authentication tokens by setting and rotating new tokens. You can now modify active tokens while in use, or add brand-new tokens to existing encryption-in-transit enabled clusters that were previously setup without authentication tokens. This is a two-step process that allows you to set and rotate the token without interrupting client requests."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.33 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Support",
5
+ "description": "The status descriptions for TrustedAdvisorCheckRefreshStatus have been updated"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Amplify",
10
+ "description": "This release of AWS Amplify Console introduces support for Web Previews. This feature allows user to create ephemeral branch deployments from pull request submissions made to a connected repository. A pull-request preview deploys every pull request made to your Git repository to a unique preview URL."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "S3",
15
+ "description": "S3 Inventory now supports a new field 'IntelligentTieringAccessTier' that reports the access tier (frequent or infrequent) of objects stored in Intelligent-Tiering storage class."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.34 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DatabaseMigrationService",
5
+ "description": "This release contains task timeline attributes in replication task statistics. This release also adds a note to the documentation for the CdcStartPosition task request parameter. This note describes how to enable the use of native CDC start points for a PostgreSQL source by setting the new slotName extra connection attribute on the source endpoint to the name of an existing logical replication slot."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudTrail",
10
+ "description": "This release adds two new APIs, GetTrail and ListTrails, and support for adding tags when you create a trail by using a new TagsList parameter on CreateTrail operations."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Pinpoint",
15
+ "description": "This release of the Amazon Pinpoint API introduces support for using and managing journeys, and querying analytics data for journeys."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.35 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RoboMaker",
5
+ "description": "RoboMaker Fleet Management launch a feature to verify your robot is ready to download and install the new robot application using a download condition file, which is a script run on the robot prior to downloading the new deployment. "
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "EC2",
10
+ "description": "Documentation updates for ec2"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "DAX",
15
+ "description": "Documentation updates for dax"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.4 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "MediaConnect",
5
+ "description": "When you grant an entitlement, you can now specify the percentage of the entitlement data transfer that you want the subscriber to be responsible for."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECS",
10
+ "description": "This release of Amazon Elastic Container Service (Amazon ECS) introduces support for container image manifest digests. This enables you to identify all tasks launched using a container image pulled from ECR in order to correlate what was built with where it is running."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Glue",
15
+ "description": "AWS Glue DevEndpoints now supports GlueVersion, enabling you to choose Apache Spark 2.4.3 (in addition to Apache Spark 2.2.1). In addition to supporting the latest version of Spark, you will also have the ability to choose between Python 2 and Python 3."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.5 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "Add a new LeaseID output field to DescribeReservedDBInstances, which shows the unique identifier for the lease associated with the reserved DB instance. AWS Support might request the lease ID for an issue related to a reserved DB instance."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Greengrass",
10
+ "description": "Greengrass OTA service now returns the updated software version in the PlatformSoftwareVersion parameter of a CreateSoftwareUpdateJob response"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "G4 instances are Amazon EC2 instances based on NVIDIA T4 GPUs and are designed to provide cost-effective machine learning inference for applications, like image classification, object detection, recommender systems, automated speech recognition, and language translation. G4 instances are also a cost-effective platform for building and running graphics-intensive applications, such as remote graphics workstations, video transcoding, photo-realistic design, and game streaming in the cloud. To get started with G4 instances visit https:\/\/aws.amazon.com\/ec2\/instance-types\/g4."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "WorkSpaces",
20
+ "description": "Adds the WorkSpaces restore feature"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.6 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Redshift",
5
+ "description": "Adds API operation DescribeNodeConfigurationOptions and associated data structures."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "RDSDataService",
10
+ "description": "RDS Data API now supports Amazon Aurora Serverless PostgreSQL databases."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.7 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3",
5
+ "description": "Tweak S3 stream wrapper size logic for seekable streams."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DataSync",
10
+ "description": "Added S3StorageClass, OverwriteMode sync option, and ONLY_FILES_TRANSFERRED setting for the VerifyMode sync option."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ComprehendMedical",
15
+ "description": "Use Amazon Comprehend Medical to analyze medical text stored in the specified Amazon S3 bucket. Use the console to create and manage batch analysis jobs, or use the batch APIs to detect both medical entities and protected health information (PHI). The batch APIs start, stop, list, and retrieve information about batch analysis jobs. This release also includes DetectEntitiesV2 operation which returns the Acuity and Direction entities as attributes instead of types."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "TranscribeService",
20
+ "description": "With this update Amazon Transcribe enables you to provide an AWS KMS key to encrypt your transcription output."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.8 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SageMaker",
5
+ "description": "Enable G4D and R5 instances in SageMaker Hosting Services"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DatabaseMigrationService",
10
+ "description": "This release adds a new DeleteConnection API to delete the connection between a replication instance and an endpoint. It also adds an optional S3 setting to specify the precision of any TIMESTAMP column values written to an S3 object file in .parquet format."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GlobalAccelerator",
15
+ "description": "API Update for AWS Global Accelerator to support for DNS aliasing."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.112.9 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CodePipeline",
5
+ "description": "Documentation updates for CodePipeline"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "This release updates the AWS Systems Manager Parameter Store PutParameter and LabelParameterVersion APIs to return the \"Tier\" of parameter created\/updated and the \"parameter version\" labeled respectively. "
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.113.0 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "CodeStarNotifications",
5
+ "description": "This release adds a notification manager for events in repositories, build projects, deployments, and pipelines. You can now configure rules and receive notifications about events that occur for resources. Each notification includes a status message as well as a link to the resource (repository, build project, deployment application, or pipeline) whose event generated the notification."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "RDS",
10
+ "description": "Documentation updates for Amazon RDS"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.114.0 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeBuild",
5
+ "description": "Add support for Build Number, Secrets Manager and Exported Environment Variables."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CostExplorer",
10
+ "description": "This launch provides customers with access to Savings Plans management APIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "signer",
15
+ "description": "This release adds support for tagging code-signing profiles in AWS Signer."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "SavingsPlans",
20
+ "description": "This is the first release of Savings Plans, a new flexible pricing model that offers low prices on Amazon EC2 and AWS Fargate usage."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "Budgets",
25
+ "description": "Documentation updates for budgets to track Savings Plans utilization and coverage"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "EFS",
30
+ "description": "EFS customers can select a lifecycle policy that automatically moves files that have not been accessed for 7 days into the EFS Infrequent Access (EFS IA) storage class. EFS IA provides price\/performance that is cost-optimized for files that are not accessed every day."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.114.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SavingsPlans",
5
+ "description": "This is the first release of Savings Plans, a new flexible pricing model that offers low prices on Amazon EC2 and AWS Fargate usage."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.115.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Comprehend",
5
+ "description": "This release adds new languages (ar, hi, ko, ja, zh, zh-TW) for Amazon Comprehend's DetectSentiment, DetectEntities, DetectKeyPhrases, BatchDetectSentiment, BatchDetectEntities and BatchDetectKeyPhrases APIs"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "AWS Systems Manager Session Manager target length increased to 400."
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "SSO",
15
+ "description": "This is an initial release of AWS Single Sign-On (SSO) end-user access. This release adds support for accessing AWS accounts assigned in AWS SSO using short term credentials."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "SSOOIDC",
20
+ "description": "This is an initial release of AWS Single Sign-On OAuth device code authorization service."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.115.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ECR",
5
+ "description": "This release contains ticket fixes for Amazon ECR."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CognitoIdentity",
10
+ "description": "This release adds support for disabling classic flow."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.115.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudFormation",
5
+ "description": "The Resource Import feature enables customers to import existing AWS resources into new or existing CloudFormation Stacks."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CostExplorer",
10
+ "description": "This launch provides customers with access to GetCostAndUsageWithResources API."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.116.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "MarketplaceCatalog",
5
+ "description": "This is the first release for the AWS Marketplace Catalog service which allows you to list, describe and manage change requests on your published entities on AWS Marketplace. "
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "ElasticLoadBalancingv2",
10
+ "description": "You can configure your Application Load Balancer to either drop invalid header fields or forward them to targets."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CodePipeline",
15
+ "description": "AWS CodePipeline now supports the use of variables in action configuration."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "TranscribeService",
20
+ "description": "With this release, Amazon Transcribe now supports transcriptions from audio sources in Welsh English (en-WL), Scottish English(en-AB), Irish English(en-IE), Farsi(fa-IR), Tamil(ta-IN), Indonesian(id-ID), Portuguese (pt-PT), Dutch(nl-NL)."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "DynamoDB",
25
+ "description": "Amazon DynamoDB enables you to restore your data to a new DynamoDB table using a point-in-time or on-demand backup. You now can modify the settings on the new restored table. Specifically, you can exclude some or all of the local and global secondary indexes from being created with the restored table. In addition, you can change the billing mode and provisioned capacity settings."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.117.0 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "SesV2",
5
+ "description": "This is the first release of version 2 of the Amazon SES API. You can use this API to configure your Amazon SES account, and to send email. This API extends the functionality that exists in the previous version of the Amazon SES API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IoT",
10
+ "description": "This release adds the custom fields definition support in the index definition for AWS IoT Fleet Indexing Service. Custom fields can be used as an aggregation field to run aggregations with both existing GetStatistics API and newly added GetCardinality, GetPercentiles APIs. GetStatistics will return all statistics (min\/max\/sum\/avg\/count...) with this release. For more information, please refer to our latest documentation: https:\/\/docs.aws.amazon.com\/iot\/latest\/developerguide\/iot-indexing.html"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CloudSearch",
15
+ "description": "Amazon CloudSearch domains let you require that all traffic to the domain arrive over HTTPS. This security feature helps you block clients that send unencrypted requests to the domain."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DLM",
20
+ "description": "You can now add tags to a lifecycle policy in Data Lifecycle Manager (DLM). Tags allow you to categorize your policies in different ways, such as by department, purpose or owner. You can also enable resource level permissions based on tags to set access control on ability to modify or delete a tagged policy."
21
+ },
22
+ {
23
+ "type": "feature",
24
+ "category": "DataExchange",
25
+ "description": "Introducing AWS Data Exchange, a service that makes it easy for AWS customers to securely create, manage, access, and exchange data sets in the cloud."
26
+ },
27
+ {
28
+ "type": "bugfix",
29
+ "category": "Credentials",
30
+ "description": "Adds extra catch block in AssumeRoleWithWebIdentityCredentialProvider to account for non-AWS exceptions."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.117.1 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "Updates support for adding attachments to Systems Manager Automation documents"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CognitoIdentityProvider",
10
+ "description": "This release adds a new setting at user pool client to prevent user existence related errors during authentication, confirmation, and password recovery related operations. This release also adds support to enable or disable specific authentication flows for a user pool client."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Personalize",
15
+ "description": "Amazon Personalize: Adds ability to get batch recommendations by creating a batch inference job."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Connect",
20
+ "description": "This release enhances the existing user management APIs and adds 3 new APIs - TagResource, UntagResource, and ListTagsForResource to support tagging Amazon Connect users, which facilitates more granular access controls for Amazon Connect users within an Amazon Connect instance. You can learn more about the new APIs here: https:\/\/docs.aws.amazon.com\/connect\/latest\/APIReference\/Welcome.html."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MarketplaceMetering",
25
+ "description": "Added CustomerNotEntitledException in MeterUsage API for Container use case."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.117.2 ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "MediaConvert",
5
+ "description": "AWS Elemental MediaConvert SDK has added support for DolbyVision encoding, and SCTE35 & ESAM insertion to DASH ISO EMSG."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "ElasticLoadBalancingv2",
10
+ "description": "Documentation-only change to the default value of the routing.http.drop_invalid_header_fields.enabled attribute."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EMR",
15
+ "description": "Access to the cluster ARN makes it easier for you to author resource-level permissions policies in AWS Identity and Access Management. To simplify the process of obtaining the cluster ARN, Amazon EMR has added a new field containing the cluster ARN to all API responses that include the cluster ID."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EKS",
20
+ "description": "Introducing Amazon EKS managed node groups, a new feature that lets you easily provision worker nodes for Amazon EKS clusters and keep them up to date using the Amazon EKS management console, CLI, and APIs."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CognitoIdentityProvider",
25
+ "description": "This release adds a new option in the User Pool to allow specifying sender's name in the emails sent by Amazon Cognito. This release also adds support to add SES Configuration Set to the emails sent by Amazon Cognito."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "CloudWatchLogs",
30
+ "description": "Documentation updates for logs"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "EC2",
35
+ "description": "You can now add tags while copying snapshots. Previously, a user had to first copy the snapshot and then add tags to the copied snapshot manually. Moving forward, you can specify the list of tags you wish to be applied to the copied snapshot as a parameter on the Copy Snapshot API. "
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "GuardDuty",
40
+ "description": "This release includes new operations related to findings export, including: CreatePublishingDestination, UpdatePublishingDestination, DescribePublishingDestination, DeletePublishingDestination and ListPublishingDestinations."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "WorkSpaces",
45
+ "description": "Added APIs to register your directories with Amazon WorkSpaces and to modify directory details. "
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "Chime",
50
+ "description": "This release adds support for Chime Room Management APIs"
51
+ },
52
+ {
53
+ "type": "enhancement",
54
+ "category": "SSM",
55
+ "description": "This release updates AWS Systems Manager Parameter Store documentation for the enhanced search capability."
56
+ }
57
+ ]
vendor/aws/aws-sdk-php/.changes/3.118.0 ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "The release contains new API and API changes for AWS Systems Manager Explorer product."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudFormation",
10
+ "description": "This release introduces APIs for the CloudFormation Registry, a new service to submit and discover resource providers with which you can manage third-party resources natively in CloudFormation."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CostExplorer",
15
+ "description": "add EstimatedOnDemandCostWithCurrentCommitment to GetSavingsPlansPurchaseRecommendationRequest API"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SageMaker",
20
+ "description": "Amazon SageMaker now supports multi-model endpoints to host multiple models on an endpoint using a single inference container."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Pinpoint",
25
+ "description": "This release of the Amazon Pinpoint API introduces support for using and managing message templates for messages that are sent through the voice channel. It also introduces support for specifying default values for message variables in message templates. "
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "RDS",
30
+ "description": "Documentation updates for rds"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "S3",
35
+ "description": "Added support for S3 Replication for existing objects. This release allows customers who have requested and been granted access to replicate existing S3 objects across buckets."
36
+ },
37
+ {
38
+ "type": "feature",
39
+ "category": "SageMakerRuntime",
40
+ "description": "Amazon SageMaker Runtime now supports a new TargetModel header to invoke a specific model hosted on multi model endpoints."
41
+ }
42
+ ]
vendor/aws/aws-sdk-php/.changes/3.119.0 ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "S3",
5
+ "description": "Added support for S3 us-east-1 regional endpoint setting and corresponding configuration."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "Credentials",
10
+ "description": "Support new secure data flow for the calls to the Instance Metadata Service."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ConfigService",
15
+ "description": "AWSConfig launches support for conformance packs. A conformance pack is a new resource type that allows you to package a collection of Config rules and remediation actions into a single entity. You can create and deploy conformance packs into your account or across all accounts in your organization"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudFormation",
20
+ "description": "This release of AWS CloudFormation StackSets enables users to detect drift on a stack set and the stack instances that belong to that stack set."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CodeBuild",
25
+ "description": "Add support for ARM and GPU-enhanced build environments and a new SSD-backed Linux compute type with additional CPU and memory in CodeBuild"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "ElasticLoadBalancingv2",
30
+ "description": "This release allows forward actions on Application Load Balancers to route requests to multiple target groups, based on the weight you specify for each target group."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "AutoScaling",
35
+ "description": "Amazon EC2 Auto Scaling now supports Instance Weighting and Max Instance Lifetime. Instance Weighting allows specifying the capacity units for each instance type included in the MixedInstancesPolicy and how they would contribute to your application's performance. Max Instance Lifetime allows specifying the maximum length of time that an instance can be in service. If any instances are approaching this limit, Amazon EC2 Auto Scaling gradually replaces them."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "IoT",
40
+ "description": "As part of this release, we are extending the capability of AWS IoT Rules Engine to send messages directly to customer's own web services\/applications. Customers can now create topic rules with HTTP actions to route messages from IoT Core directly to URL's that they own. Ownership is proved by creating and confirming topic rule destinations."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "IAM",
45
+ "description": "IAM reports the timestamp when a role's credentials were last used to make an AWS request. This helps you identify unused roles and remove them confidently from your AWS accounts."
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "Lambda",
50
+ "description": "This release provides three new runtimes to support Node.js 12 (initially 12.13.0), Python 3.8 and Java 11. "
51
+ },
52
+ {
53
+ "type": "api-change",
54
+ "category": "EC2",
55
+ "description": "This release adds support for RunInstances to specify the metadata options for new instances; adds a new API, ModifyInstanceMetadataOptions, which lets you modify the metadata options for a running or stopped instance; and adds support for CreateCustomerGateway to specify a device name."
56
+ }
57
+ ]
vendor/aws/aws-sdk-php/.changes/3.120.0 ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Credentials",
5
+ "description": "Tweak instance profile provider fallback behavior."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "StorageGateway",
10
+ "description": "The new DescribeAvailabilityMonitorTest API provides the results of the most recent High Availability monitoring test. The new StartAvailabilityMonitorTest API verifies the storage gateway is configured for High Availability monitoring. The new ActiveDirectoryStatus response element has been added to the DescribeSMBSettings and JoinDomain APIs to indicate the status of the gateway after the most recent JoinDomain operation. The new TimeoutInSeconds parameter of the JoinDomain API allows for the configuration of the timeout in which the JoinDomain operation must complete."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "DataSync",
15
+ "description": "Update to configure task to run periodically on a schedule"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "FSx",
20
+ "description": "Announcing a Multi-AZ deployment type for Amazon FSx for Windows File Server, providing fully-managed Windows file storage with high availability and redundancy across multiple AWS Availability Zones."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ApplicationDiscoveryService",
25
+ "description": "New exception type for use with Migration Hub home region"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "MediaStore",
30
+ "description": "This release fixes a broken link in the SDK documentation."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "TranscribeService",
35
+ "description": "With this release Amazon Transcribe enables alternative transcriptions so that you can see different interpretations of transcribed audio."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "DLM",
40
+ "description": "DLM now supports Fast Snapshot Restore. You can enable Fast Restore on snapshots created by DLM, provide the AZs and the number of snapshots to be enabled with this capability."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "ECS",
45
+ "description": "Added support for CPU and memory task-level overrides on the RunTask and StartTask APIs. Added location information to Tasks."
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "CodeCommit",
50
+ "description": "This release adds support for creating pull request approval rules and pull request approval rule templates in AWS CodeCommit. This allows developers to block merges of pull requests, contingent on the approval rules being satisfiied."
51
+ },
52
+ {
53
+ "type": "api-change",
54
+ "category": "Firehose",
55
+ "description": "With this release, Amazon Kinesis Data Firehose allows server side encryption with customer managed CMKs. Customer managed CMKs ( \"Customer Master Keys\") are AWS Key Management Service (KMS) keys that are fully managed by the customer. With customer managed CMKs, customers can establish and maintain their key policies, IAM policies, rotating policies and add tags. For more information about AWS KMS and CMKs, please refer to: https:\/\/docs.aws.amazon.com\/kms\/latest\/developerguide\/concepts.html. Please refer to the following link to create CMKs: https:\/\/docs.aws.amazon.com\/kms\/latest\/developerguide\/importing-keys-create-cmk.html"
56
+ },
57
+ {
58
+ "type": "feature",
59
+ "category": "MigrationHubConfig",
60
+ "description": "AWS Migration Hub Config Service allows you to get and set the Migration Hub home region for use with AWS Migration Hub and Application Discovery Service"
61
+ },
62
+ {
63
+ "type": "api-change",
64
+ "category": "MigrationHub",
65
+ "description": "New exception type for use with Migration Hub home region"
66
+ },
67
+ {
68
+ "type": "api-change",
69
+ "category": "QuickSight",
70
+ "description": "Amazon QuickSight now supports programmatic creation and management of data sources, data sets, dashboards and templates with new APIs. Templates hold dashboard metadata, and can be used to create copies connected to the same or different dataset as required. Also included in this release are APIs for SPICE ingestions, fine-grained access control over AWS resources using AWS Identity and Access Management (IAM) policies, as well AWS tagging. APIs are supported for both Standard and Enterprise Edition, with edition-specific support for specific functionality."
71
+ },
72
+ {
73
+ "type": "api-change",
74
+ "category": "CloudTrail",
75
+ "description": " 1. This release adds two new APIs, GetInsightSelectors and PutInsightSelectors, which let you configure CloudTrail Insights event delivery on a trail. An Insights event is a new type of event that is generated when CloudTrail detects unusual activity in your AWS account. In this release, only \"ApiCallRateInsight\" is a supported Insights event type. 2. This release also adds the new \"ExcludeManagementEventSource\" option to the existing PutEventSelectors API. This field currently supports only AWS Key Management Services."
76
+ },
77
+ {
78
+ "type": "api-change",
79
+ "category": "EC2",
80
+ "description": "This release of Amazon Elastic Compute Cloud (Amazon EC2) introduces support for Amazon Elastic Block Store (Amazon EBS) fast snapshot restores."
81
+ },
82
+ {
83
+ "type": "api-change",
84
+ "category": "S3",
85
+ "description": "This release introduces support for Amazon S3 Replication Time Control, a new feature of S3 Replication that provides a predictable replication time backed by a Service Level Agreement. S3 Replication Time Control helps customers meet compliance or business requirements for data replication, and provides visibility into the replication process with new Amazon CloudWatch Metrics."
86
+ },
87
+ {
88
+ "type": "api-change",
89
+ "category": "Chime",
90
+ "description": "Adds APIs to create and manage meeting session resources for the Amazon Chime SDK"
91
+ }
92
+ ]
vendor/aws/aws-sdk-php/.changes/3.121.0 ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "TranscribeService",
5
+ "description": "With this release, Amazon Transcribe now supports transcriptions from audio sources in Hebrew (he-IL), Swiss German (de-CH), Japanese (ja-JP), Turkish (tr-TR), Arabic-Gulf (ar-AE), Malay (ms-MY), Telugu (te-IN)"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Glue",
10
+ "description": "This release adds support for Glue 1.0 compatible ML Transforms."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "MarketplaceMetering",
15
+ "description": "Documentation updates for the AWS Marketplace Metering Service."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Connect",
20
+ "description": "This release adds a new API: StartChatContact. You can use it to programmatically start a chat on the specified Amazon Connect instance. Learn more here: https:\/\/docs.aws.amazon.com\/connect\/latest\/APIReference\/Welcome.html "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "LexModelBuildingService",
25
+ "description": "Amazon Lex now supports Sentiment Analysis"
26
+ },
27
+ {
28
+ "type": "feature",
29
+ "category": "ConnectParticipant",
30
+ "description": "This release adds 5 new APIs: CreateParticipantConnection, DisconnectParticipant, GetTranscript, SendEvent, and SendMessage. For Amazon Connect chat, you can use them to programmatically perform participant actions on the configured Amazon Connect instance. Learn more here: https:\/\/docs.aws.amazon.com\/connect-participant\/latest\/APIReference\/Welcome.html"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Amplify",
35
+ "description": "This release of AWS Amplify Console introduces support for backend environments. Backend environments are containers for AWS deployments. Each environment is a collection of AWS resources."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "DynamoDB",
40
+ "description": "With this release, you can convert an existing Amazon DynamoDB table to a global table by adding replicas in other AWS Regions."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "LexRuntimeService",
45
+ "description": "Amazon Lex now supports Sentiment Analysis"
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "EC2",
50
+ "description": "This release adds support for attaching AWS License Manager Configurations to Amazon Machine Image (AMI) using ImportImage API; and adds support for running different instance sizes on EC2 Dedicated Hosts"
51
+ },
52
+ {
53
+ "type": "api-change",
54
+ "category": "AppSync",
55
+ "description": "AppSync: AWS AppSync now supports the ability to add, configure, and maintain caching for your AWS AppSync GraphQL API."
56
+ },
57
+ {
58
+ "type": "api-change",
59
+ "category": "SSM",
60
+ "description": "The release contains new API and API changes for AWS Systems Manager Explorer product."
61
+ },
62
+ {
63
+ "type": "api-change",
64
+ "category": "ConfigService",
65
+ "description": "AWS Config launches Custom Configuration Items. A new feature which allows customers to publish resource configuration for third-party resources, custom, or on-premises servers."
66
+ }
67
+ ]
vendor/aws/aws-sdk-php/.changes/3.121.1 ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "STS",
5
+ "description": "Support tagging for STS sessions and tag based access control for the STS APIs"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeBuild",
10
+ "description": "Add Canonical ARN to LogsLocation."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AutoScalingPlans",
15
+ "description": "Update default endpoint for AWS Auto Scaling."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ForecastService",
20
+ "description": "This release adds two key updates to existing APIs. 1. Amazon Forecast can now generate forecasts in any quantile using the optional parameter forecastTypes in the CreateForecast API and 2. You can get additional details (metrics and relevant error messages) on your AutoML runs using the DescribePredictor and GetAccuracyMetrics APIs."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Rekognition",
25
+ "description": "This release adds enhanced face filtering support to the IndexFaces API operation, and introduces face filtering for CompareFaces and SearchFacesByImage API operations."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "SNS",
30
+ "description": "Added documentation for the dead-letter queue feature."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "ACM",
35
+ "description": "This release adds support for Tag-Based IAM for AWS Certificate Manager and adding tags to certificates upon creation."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "SSM",
40
+ "description": "Add RebootOption and LastNoRebootInstallOperationTime for DescribeInstancePatchStates and DescribeInstancePatchStatesForPatchGroup API"
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "EC2",
45
+ "description": "This release adds two new APIs (DescribeInstanceTypes and DescribeInstanceTypeOfferings) that give customers access to instance type attributes and regional and zonal offerings."
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "ApplicationAutoScaling",
50
+ "description": "Update default endpoint for Application Auto Scaling."
51
+ },
52
+ {
53
+ "type": "api-change",
54
+ "category": "MediaPackageVod",
55
+ "description": "Includes the submission time of Asset ingestion request in the API response for Create\/List\/Describe Assets."
56
+ },
57
+ {
58
+ "type": "api-change",
59
+ "category": "EMR",
60
+ "description": "Amazon EMR adds support for concurrent step execution and cancelling running steps. Amazon EMR has added a new Outpost ARN field in the ListCluster and DescribeCluster API responses that is populated for clusters launched in an AWS Outpost subnet."
61
+ }
62
+ ]
vendor/aws/aws-sdk-php/.changes/3.122.0 ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release adds two new APIs: 1. ModifyDefaultCreditSpecification, which allows you to set default credit specification at the account level per AWS Region, per burstable performance instance family, so that all new burstable performance instances in the account launch using the new default credit specification. 2. GetDefaultCreditSpecification, which allows you to get current default credit specification per AWS Region, per burstable performance instance family. This release also adds new client exceptions for StartInstances and StopInstances."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AlexaForBusiness",
10
+ "description": "API update for Alexa for Business: This update enables the use of meeting room configuration that can be applied to a room profile. These settings help improve and measure utilization on Alexa for Business enabled rooms. New features include end meeting reminders, intelligent room release and room utilization analytics report."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ApplicationInsights",
15
+ "description": "CloudWatch Application Insights for .NET and SQL Server includes the follwing features: -Tagging Create and manage tags for your applications.-Custom log pattern matching. Define custom log patterns to be detected and monitored.-Resource-level permissions. Specify applications users can access."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElasticLoadBalancingv2",
20
+ "description": "This release of Elastic Load Balancing V2 adds new subnet features for Network Load Balancers and a new routing algorithm for Application Load Balancers. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "DLM",
25
+ "description": "You can now set time based retention policies on Data Lifecycle Manager. With this launch, DLM allows you to set snapshot retention period in the following interval units: days, weeks, months and years."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "MediaPackageVod",
30
+ "description": "Adds a domain name to PackagingGroups, representing the fully qualified domain name for Assets created in the group."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "RDS",
35
+ "description": "Cluster Endpoints can now be tagged by using --tags in the create-db-cluster-endpoint API"
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "MediaLive",
40
+ "description": "AWS Elemental MediaLive now supports the ability to create a multiple program transport stream (MPTS)."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "Redshift",
45
+ "description": "This release contains changes for 1. Redshift Scheduler 2. Update to the DescribeNodeConfigurationOptions to include a new action type recommend-node-config"
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "CloudWatch",
50
+ "description": "This release adds a new feature called \"Contributor Insights\". \"Contributor Insights\" supports the following 6 new APIs (PutInsightRule, DeleteInsightRules, EnableInsightRules, DisableInsightRules, DescribeInsightRules and GetInsightRuleReport). "
51
+ },
52
+ {
53
+ "type": "feature",
54
+ "category": "WAFV2",
55
+ "description": "This release introduces new set of APIs (\"wafv2\") for AWS WAF. Major changes include single set of APIs for creating\/updating resources in global and regional scope, and rules are configured directly into web ACL instead of being referenced. The previous APIs (\"waf\" and \"waf-regional\") are now referred as AWS WAF Classic. For more information visit: https:\/\/docs.aws.amazon.com\/waf\/latest\/APIReference\/Welcome.html"
56
+ },
57
+ {
58
+ "type": "api-change",
59
+ "category": "SSM",
60
+ "description": "AWS Systems Manager Documents now supports more Document Types: ApplicationConfiguration, ApplicationConfigurationSchema and DeploymentStrategy. This release also extends Document Permissions capabilities and introduces a new Force flag for DeleteDocument API."
61
+ },
62
+ {
63
+ "type": "api-change",
64
+ "category": "Greengrass",
65
+ "description": "IoT Greengrass supports machine learning resources in 'No container' mode."
66
+ },
67
+ {
68
+ "type": "api-change",
69
+ "category": "Lambda",
70
+ "description": "Added the function state and update status to the output of GetFunctionConfiguration and other actions. Check the state information to ensure that a function is ready before you perform operations on it. Functions take time to become ready when you connect them to a VPC.Added the EventInvokeConfig type and operations to configure error handling options for asynchronous invocation. Use PutFunctionEventInvokeConfig to configure the number of retries and the maximum age of events when you invoke the function asynchronously.Added on-failure and on-success destination settings for asynchronous invocation. Configure destinations to send an invocation record to an SNS topic, an SQS queue, an EventBridge event bus, or a Lambda function.Added error handling options to event source mappings. This enables you to configure the number of retries, configure the maximum age of records, or retry with smaller batches when an error occurs when a function processes a Kinesis or DynamoDB stream.Added the on-failure destination setting to event source mappings. This enables you to send discarded events to an SNS topic or SQS queue when all retries fail or when the maximum record age is exceeded when a function processes a Kinesis or DynamoDB stream.Added the ParallelizationFactor option to event source mappings to increase concurrency per shard when a function processes a Kinesis or DynamoDB stream."
71
+ },
72
+ {
73
+ "type": "api-change",
74
+ "category": "CognitoIdentityProvider",
75
+ "description": "Amazon Cognito Userpools now supports Sign in with Apple as an Identity Provider."
76
+ },
77
+ {
78
+ "type": "api-change",
79
+ "category": "KMS",
80
+ "description": "AWS Key Management Service (KMS) now enables creation and use of asymmetric Customer Master Keys (CMKs) and the generation of asymmetric data key pairs."
81
+ },
82
+ {
83
+ "type": "api-change",
84
+ "category": "MediaConvert",
85
+ "description": "AWS Elemental MediaConvert SDK has added support for 8K outputs and support for QuickTime Animation Codec (RLE) inputs."
86
+ },
87
+ {
88
+ "type": "api-change",
89
+ "category": "Athena",
90
+ "description": "This release adds additional query lifecycle metrics to the QueryExecutionStatistics object in GetQueryExecution response."
91
+ },
92
+ {
93
+ "type": "api-change",
94
+ "category": "LexRuntimeService",
95
+ "description": "Amazon Lex adds \"sessionId\" attribute to the PostText and PostContent response."
96
+ },
97
+ {
98
+ "type": "api-change",
99
+ "category": "CodeBuild",
100
+ "description": "CodeBuild adds support for test reporting"
101
+ },
102
+ {
103
+ "type": "api-change",
104
+ "category": "KinesisAnalyticsV2",
105
+ "description": "Kinesis Data Analytics service adds support to configure Java applications to access resources in a VPC. Also releasing support to configure Java applications to set allowNonRestoreState flag through the service APIs."
106
+ },
107
+ {
108
+ "type": "feature",
109
+ "category": "AppConfig",
110
+ "description": "Introducing AWS AppConfig, a new service that enables customers to quickly deploy validated configurations to applications of any size in a controlled and monitored fashion."
111
+ },
112
+ {
113
+ "type": "api-change",
114
+ "category": "ApplicationAutoScaling",
115
+ "description": "This release supports auto scaling of document classifier endpoints for Comprehend; and supports target tracking based on the average capacity utilization metric for AppStream 2.0 fleets. "
116
+ },
117
+ {
118
+ "type": "api-change",
119
+ "category": "CostExplorer",
120
+ "description": "This launch provides customers with access to Cost Category Public Beta APIs."
121
+ },
122
+ {
123
+ "type": "api-change",
124
+ "category": "SesV2",
125
+ "description": "This release includes support for automatically suppressing email addresses that result in hard bounce or complaint events at the account level, and for managing addresses on this account-level suppression list."
126
+ },
127
+ {
128
+ "type": "api-change",
129
+ "category": "Comprehend",
130
+ "description": "Amazon Comprehend now supports real-time analysis with Custom Classification"
131
+ },
132
+ {
133
+ "type": "api-change",
134
+ "category": "RAM",
135
+ "description": "AWS RAM provides new APIs to view the permissions granted to principals in a resource share. This release also creates corresponding resource shares for supported services that use resource policies, as well as an API to promote them to standard shares that can be managed in RAM."
136
+ },
137
+ {
138
+ "type": "feature",
139
+ "category": "IoTSecureTunneling",
140
+ "description": "This release adds support for IoT Secure Tunneling to remote access devices behind restricted firewalls."
141
+ },
142
+ {
143
+ "type": "api-change",
144
+ "category": "IoT",
145
+ "description": "This release adds: 1) APIs for fleet provisioning claim and template, 2) endpoint configuration and custom domains, 3) support for enhanced custom authentication, d) support for 4 additional audit checks: Device and CA certificate key quality checks, IoT role alias over-permissive check and IoT role alias access to unused services check, 5) extended capability of AWS IoT Rules Engine to support IoT SiteWise rule action. The IoT SiteWise rule action lets you send messages from IoT sensors and applications to IoT SiteWise asset properties"
146
+ }
147
+ ]
vendor/aws/aws-sdk-php/.changes/3.123.0 ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDSDataService",
5
+ "description": "Type hints to improve handling of some specific parameter types (date\/time, decimal etc) for ExecuteStatement and BatchExecuteStatement APIs"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "QuickSight",
10
+ "description": "Documentation updates for QuickSight"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ServerlessApplicationRepository",
15
+ "description": "AWS Serverless Application Repository now supports verified authors. Verified means that AWS has made a good faith review, as a reasonable and prudent service provider, of the information provided by the requester and has confirmed that the requester's identity is as claimed."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ResourceGroupsTaggingAPI",
20
+ "description": "You can use tag policies to help standardize on tags across your organization's resources."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Organizations",
25
+ "description": "Introduces the DescribeEffectivePolicy action, which returns the contents of the policy that's in effect for the account."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "DirectoryService",
30
+ "description": "This release will introduce optional encryption over LDAP network traffic using SSL certificates between customer's self-managed AD and AWS Directory Services instances. The release also provides APIs for Certificate management."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "CognitoIdentityProvider",
35
+ "description": "This release adds a new setting for a user pool to configure which recovery methods a user can use to recover their account via the forgot password operation."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "WorkSpaces",
40
+ "description": "For the WorkspaceBundle API, added the image identifier and the time of the last update."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "DynamoDB",
45
+ "description": "1) Amazon Contributor Insights for Amazon DynamoDB is a diagnostic tool for identifying frequently accessed keys and understanding database traffic trends. 2) Support for displaying new fields when a table's encryption state is Inaccessible or the table have been Archived."
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "MediaTailor",
50
+ "description": "AWS Elemental MediaTailor SDK now allows configuration of the Live Pre-Roll feature for HLS and DASH streams."
51
+ },
52
+ {
53
+ "type": "feature",
54
+ "category": "ElasticInference",
55
+ "description": "Amazon Elastic Inference allows customers to attach Elastic Inference Accelerators to Amazon EC2 and Amazon ECS tasks, thus providing low-cost GPU-powered acceleration and reducing the cost of running deep learning inference. This release allows customers to add or remove tags for their Elastic Inference Accelerators."
56
+ }
57
+ ]
vendor/aws/aws-sdk-php/.changes/3.124.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "LicenseManager",
5
+ "description": "AWS License Manager now automates discovery of bring-your-own-license usage across the customers organization. With few simple settings, customers can add bring your own license product information along with licensing rules, which would enable License Manager to automatically track the instances that have the specified products installed. If License Manager detects any violation of licensing rules, it would notify the customers designated license administrator to take corrective action."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "imagebuilder",
10
+ "description": "This is the first release of EC2 Image Builder, a service that provides a managed experience for automating the creation of EC2 AMIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "AWS now provides a new BYOL experience for software licenses, such as Windows and SQL Server, that require a dedicated physical server. You can now enjoy the flexibility and cost effectiveness of using your own licenses on Amazon EC2 Dedicated Hosts, but with the simplicity, resiliency, and elasticity of AWS. You can specify your Dedicated Host management preferences, such as host allocation, host capacity utilization, and instance placement in AWS License Manager. Once set up, AWS takes care of these administrative tasks on your behalf, so that you can seamlessly launch virtual machines (instances) on Dedicated Hosts just like you would launch an EC2 instance with AWS provided licenses."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "Schemas",
20
+ "description": "This release introduces support for Amazon EventBridge schema registry, making it easy to discover and write code for events in EventBridge."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.125.0 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "AccessAnalyzer",
5
+ "description": "Introducing AWS IAM Access Analyzer, an IAM feature that makes it easy for AWS customers to ensure that their resource-based policies provide only the intended access to resources outside their AWS accounts."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.126.0 ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "ComputeOptimizer",
5
+ "description": "Initial release of AWS Compute Optimizer. AWS Compute Optimizer recommends optimal AWS Compute resources to reduce costs and improve performance for your workloads."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "NetworkManager",
10
+ "description": "This is the initial SDK release for AWS Network Manager."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Textract",
15
+ "description": "This SDK Release introduces Amazon Augmented AI support for Amazon Textract AnalyzeDocument API. Image byte payloads for synchronous operations have increased from 5 MB to 10 MB."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "kendra",
20
+ "description": "It is a preview launch of Amazon Kendra. Amazon Kendra is a managed, highly accurate and easy to use enterprise search service that is powered by machine learning."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "S3",
25
+ "description": "Amazon S3 Access Points is a new S3 feature that simplifies managing data access at scale for shared data sets on Amazon S3. Access Points provide a customizable way to access the objects in a bucket, with a unique hostname and access policy that enforces the specific permissions and network controls for any request made through the access point. This represents a new way of provisioning access to shared data sets."
26
+ },
27
+ {
28
+ "type": "feature",
29
+ "category": "FraudDetector",
30
+ "description": "Amazon Fraud Detector is a fully managed service that makes it easy to identify potentially fraudulent online activities such as online payment fraud and the creation of fake accounts. Amazon Fraud Detector uses your data, machine learning (ML), and more than 20 years of fraud detection expertise from Amazon to automatically identify potentially fraudulent online activity so you can catch more fraud faster."
31
+ },
32
+ {
33
+ "type": "feature",
34
+ "category": "CodeGuruReviewer",
35
+ "description": "This is the preview release of Amazon CodeGuru Reviewer."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "EKS",
40
+ "description": "Introducing Amazon EKS with Fargate. Customers can now use Amazon EKS to launch pods directly onto AWS Fargate, the serverless compute engine built for containers on AWS. "
41
+ },
42
+ {
43
+ "type": "feature",
44
+ "category": "CodeGuruProfiler",
45
+ "description": "(New Service) Amazon CodeGuru Profiler analyzes application CPU utilization and latency characteristics to show you where you are spending the most cycles in your application. This analysis is presented in an interactive flame graph that helps you easily understand which paths consume the most resources, verify that your application is performing as expected, and uncover areas that can be optimized further."
46
+ },
47
+ {
48
+ "type": "feature",
49
+ "category": "Outposts",
50
+ "description": "This is the initial release for AWS Outposts, a fully managed service that extends AWS infrastructure, services, APIs, and tools to customer sites. AWS Outposts enables you to launch and run EC2 instances and EBS volumes locally at your on-premises location. This release introduces new APIs for creating and viewing Outposts. "
51
+ },
52
+ {
53
+ "type": "api-change",
54
+ "category": "ElasticsearchService",
55
+ "description": "UltraWarm storage provides a cost-effective way to store large amounts of read-only data on Amazon Elasticsearch Service. Rather than attached storage, UltraWarm nodes use Amazon S3 and a sophisticated caching solution to improve performance. For indices that you are not actively writing to and query less frequently, UltraWarm storage offers significantly lower costs per GiB. In Elasticsearch, these warm indices behave just like any other index. You can query them using the same APIs or use them to create dashboards in Kibana."
56
+ },
57
+ {
58
+ "type": "api-change",
59
+ "category": "ECS",
60
+ "description": "This release supports ECS Capacity Providers, Fargate Spot, and ECS Cluster Auto Scaling. These features enable new ways for ECS to manage compute capacity used by tasks."
61
+ },
62
+ {
63
+ "type": "feature",
64
+ "category": "AugmentedAIRuntime",
65
+ "description": "This release adds support for Amazon Augmented AI, which makes it easy to build workflows for human review of machine learning predictions."
66
+ },
67
+ {
68
+ "type": "api-change",
69
+ "category": "EC2",
70
+ "description": "This release adds support for the following features: 1. An option to enable acceleration for Site-to-Site VPN connections, to improve connection performance by leveraging AWS Global Accelerator; 2. Inf1 instances featuring up to 16 AWS Inferentia chips, custom-built for ML inference applications to deliver low latency and high throughput performance. Use Inf1 instances to run high scale ML inference applications such as image recognition, speech recognition, natural language processing, personalization, and fraud detection at the lowest cost in the cloud. Inf1 instances will soon be available for use with Amazon SageMaker, Amazon EKS and Amazon ECS. To get started, see https:\/\/aws.amazon.com\/ec2\/instance-types\/Inf1; 3. The ability to associate route tables with internet gateways and virtual private gateways, and define routes to insert network and security virtual appliances in the path of inbound and outbound traffic. For more information on Amazon VPC Ingress Routing, see https:\/\/docs.aws.amazon.com\/vpc\/latest\/userguide\/VPC_Route_Tables.html#gateway-route-table; 4. AWS Local Zones that place compute, storage, database, and other select services closer to you for applications that require very low latency to your end-users. AWS Local Zones also allow you to seamlessly connect to the full range of services in the AWS Region through the same APIs and tool sets; 5. Launching and viewing EC2 instances and EBS volumes running locally in Outposts. This release also introduces a new local gateway (LGW) with Outposts to enable connectivity between Outposts and local on-premises networks as well as the internet; 6. Peering Transit Gateways between regions simplifying creation of secure and private global networks on AWS; 7. Transit Gateway Multicast, enabling multicast routing within and between VPCs using Transit Gateway as a multicast router."
71
+ },
72
+ {
73
+ "type": "api-change",
74
+ "category": "S3Control",
75
+ "description": "Amazon S3 Access Points is a new S3 feature that simplifies managing data access at scale for shared data sets on Amazon S3. Access Points provide a customizable way to access the objects in a bucket, with a unique hostname and access policy that enforces the specific permissions and network controls for any request made through the access point. This represents a new way of provisioning access to shared data sets."
76
+ }
77
+ ]
vendor/aws/aws-sdk-php/.changes/3.127.0 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "",
5
+ "description": "Fixes array offset null issue and test stream class for PHP 7.4."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "S3",
10
+ "description": "Adds support for using S3 Access Point ARNs in Bucket fields for S3 operations and helper classes."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "You can now use SageMaker Autopilot for automatically training and tuning candidate models using a combination of various feature engineering, ML algorithms, and hyperparameters determined from the user's input data. SageMaker Automatic Model Tuning now supports tuning across multiple algorithms. With Amazon SageMaker Experiments users can create Experiments, ExperimentTrials, and ExperimentTrialComponents to track, organize, and evaluate their ML training jobs. With Amazon SageMaker Debugger, users can easily debug training jobs using a number of pre-built rules provided by Amazon SageMaker, or build custom rules. With Amazon SageMaker Processing, users can run on-demand, distributed, and fully managed jobs for data pre- or post- processing or model evaluation. With Amazon SageMaker Model Monitor, a user can create MonitoringSchedules to automatically monitor endpoints to detect data drift and other issues and get alerted on them. This release also includes the preview version of Amazon SageMaker Studio with Domains, UserProfiles, and Apps. This release also includes the preview version of Amazon Augmented AI to easily implement human review of machine learning predictions by creating FlowDefinitions, HumanTaskUis, and HumanLoops."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SFN",
20
+ "description": "This release of the AWS Step Functions SDK introduces support for Express Workflows."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ApplicationAutoScaling",
25
+ "description": "This release supports auto scaling of provisioned concurrency for AWS Lambda."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Lambda",
30
+ "description": "- Added the ProvisionedConcurrency type and operations. Allocate provisioned concurrency to enable your function to scale up without fluctuations in latency. Use PutProvisionedConcurrencyConfig to configure provisioned concurrency on a version of a function, or on an alias."
31
+ },
32
+ {
33
+ "type": "feature",
34
+ "category": "EBS",
35
+ "description": "This release introduces the EBS direct APIs for Snapshots: 1. ListSnapshotBlocks, which lists the block indexes and block tokens for blocks in an Amazon EBS snapshot. 2. ListChangedBlocks, which lists the block indexes and block tokens for blocks that are different between two snapshots of the same volume\/snapshot lineage. 3. GetSnapshotBlock, which returns the data in a block of an Amazon EBS snapshot."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Rekognition",
40
+ "description": "This SDK Release introduces APIs for Amazon Rekognition Custom Labels feature (CreateProjects, CreateProjectVersion,DescribeProjects, DescribeProjectVersions, StartProjectVersion, StopProjectVersion and DetectCustomLabels). Also new is AugmentedAI (Human In The Loop) Support for DetectModerationLabels in Amazon Rekognition."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "RDS",
45
+ "description": "This release adds support for the Amazon RDS Proxy"
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.128.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Test\\S3",
5
+ "description": "Fixes stream reading issue in TransferTest with PHP 7.4."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ApiGatewayV2",
10
+ "description": "Amazon API Gateway now supports HTTP APIs (beta), enabling customers to quickly build high performance RESTful APIs that are up to 71% cheaper than REST APIs also available from API Gateway. HTTP APIs are optimized for building APIs that proxy to AWS Lambda functions or HTTP backends, making them ideal for serverless workloads. Using HTTP APIs, you can secure your APIs using OIDC and OAuth 2 out of box, quickly build web applications using a simple CORS experience, and get started immediately with automatic deployment and simple create workflows."
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "KinesisVideoSignalingChannels",
15
+ "description": "Announcing support for WebRTC in Kinesis Video Streams, as fully managed capability. You can now use simple APIs to enable your connected devices, web, and mobile apps with real-time two-way media streaming capabilities."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "KinesisVideo",
20
+ "description": "Introduces management of signaling channels for Kinesis Video Streams."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.128.1 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Test",
5
+ "description": "Adds a test bootstrap patch for a PHPUnit class file that triggers deprecation warnings for PHP 7.4+. This is necessary because the SDK supports older versions of PHP and currently relies on older, now unsupported, versions of PHPUnit."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "KMS",
10
+ "description": "The Verify operation now returns KMSInvalidSignatureException on invalid signatures. The Sign and Verify operations now return KMSInvalidStateException when a request is made against a CMK pending deletion."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Kafka",
15
+ "description": "AWS MSK has added support for Open Monitoring with Prometheus."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "QuickSight",
20
+ "description": "Documentation updates for QuickSight"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SSM",
25
+ "description": "Adds the SSM GetCalendarState API and ChangeCalendar SSM Document type. These features enable the forthcoming Systems Manager Change Calendar feature, which will allow you to schedule events during which actions should (or should not) be performed."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.128.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "kendra",
5
+ "description": "1. Adding DocumentTitleFieldName as an optional configuration for SharePoint. 2. updating s3 object pattern to support all s3 keys."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "S3Control",
10
+ "description": "Adds AccountId validation for S3Control."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.128.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release allows customers to attach multiple Elastic Inference Accelerators to a single EC2 instance. It adds support for a Count parameter for each Elastic Inference Accelerator type you specify on the RunInstances and LaunchTemplate APIs."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.128.4 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AccessAnalyzer",
5
+ "description": "This release includes improvements and fixes bugs for the IAM Access Analyzer feature."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.129.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SesV2",
5
+ "description": "Added the ability to use your own public-private key pair to configure DKIM authentication for a domain identity."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeBuild",
10
+ "description": "CodeBuild adds support for cross account"
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "Detective",
15
+ "description": "This is the initial release of Amazon Detective."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "Api\\Parser",
20
+ "description": "Add support for parsing XML attributes for models using XML-based protocols."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.129.1 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "You can now configure your EC2 Fleet to preferentially use EC2 Capacity Reservations for launching On-Demand instances, enabling you to fully utilize the available (and unused) Capacity Reservations before launching On-Demand instances on net new capacity."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ComprehendMedical",
10
+ "description": "New Ontology linking APIs will provides medication concepts normalization and Diagnoses codes from input text. In this release we will provide two APIs - RxNorm and ICD10-CM. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MQ",
15
+ "description": "Amazon MQ now supports throughput-optimized message brokers, backed by Amazon EBS."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.129.2 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "KinesisAnalyticsV2",
5
+ "description": "Kinesis Data Analytics service now supports running Java applications using Flink 1.8."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "Added support for Cloud Watch Output and Document Version to the Run Command tasks in Maintenance Windows."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "IoT",
15
+ "description": "Added a new Over-the-Air (OTA) Update feature that allows you to use different, or multiple, protocols to transfer an image from the AWS cloud to IoT devices."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "ECS",
20
+ "description": "Documentation updates for Amazon ECS."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MediaLive",
25
+ "description": "AWS Elemental MediaLive now supports HLS ID3 segment tagging, HLS redundant manifests for CDNs that support different publishing\/viewing endpoints, fragmented MP4 (fMP4), and frame capture intervals specified in milliseconds."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "EC2",
30
+ "description": "Documentation updates for Amazon EC2"
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.129.3 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Build\\Docs",
5
+ "description": "Adds a hook for custom examples in API documentation generation."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "This release introduces the ability to tag Elastic Graphics accelerators. You can use tags to organize and identify your accelerators for cost allocation."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "OpsWorksCM",
15
+ "description": "AWS OpsWorks CM now supports tagging, and tag-based access control, of servers and backups."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "CloudFront",
20
+ "description": "Documentation updates for CloudFront"
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "ResourceGroupsTaggingAPI",
25
+ "description": "Documentation updates for resourcegroupstaggingapi"
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "S3",
30
+ "description": "Updates Amazon S3 endpoints allowing you to configure your client to opt-in to using S3 with the us-east-1 regional endpoint, instead of global."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.130.0 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "TranscribeService",
5
+ "description": "Amazon Transcribe supports job queuing for the StartTranscriptionJob API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DLM",
10
+ "description": "You can now copy snapshots across regions using Data Lifecycle Manager (DLM). You can enable policies which, along with create, can now also copy snapshots to one or more AWS region(s). Copies can be scheduled for up to three regions from a single policy and retention periods are set for each region separately. "
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "CodeStarconnections",
15
+ "description": "Public beta for Bitbucket Cloud support in AWS CodePipeline through integration with AWS CodeStar connections."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "GameLift",
20
+ "description": "Amazon GameLift now supports ARNs for all key GameLift resources, tagging for GameLift resource authorization management, and updated documentation that articulates GameLift's resource authorization strategy."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "LexModelBuildingService",
25
+ "description": "Amazon Lex now supports conversation logs and slot obfuscation."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "SSM",
30
+ "description": "This release allows customers to add tags to Automation execution, enabling them to sort and filter executions in different ways, such as by resource, purpose, owner, or environment."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "EC2",
35
+ "description": "We are updating the supportedRootDevices field to supportedRootDeviceTypes for DescribeInstanceTypes API to ensure that the actual value is returned, correcting a previous error in the model."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "PersonalizeRuntime",
40
+ "description": "Add context map to get-recommendations and get-personalized-ranking request objects to provide contextual metadata at inference time"
41
+ },
42
+ {
43
+ "type": "enhancement",
44
+ "category": "Credentials",
45
+ "description": "Brings PHP SDK inline with Python's boto3, allowing setting instance metadata timeout and retries from environment variables"
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.130.1 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "This release updates the attachments support to include AttachmentReference source for Automation documents."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Pinpoint",
10
+ "description": "This release of the Amazon Pinpoint API introduces versioning support for message templates."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EKS",
15
+ "description": "Amazon EKS now supports restricting access to the API server public endpoint by applying CIDR blocks"
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "Redshift",
20
+ "description": "Documentation updates for Amazon Redshift RA3 node types."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "TranscribeService",
25
+ "description": "AWS Transcribe now supports vocabulary filtering that allows customers to input words to the service that they don't want to see in the output transcript."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "DeviceFarm",
30
+ "description": "Introduced browser testing support through AWS Device Farm"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "RDS",
35
+ "description": "This release adds an operation that enables users to specify whether a database is restarted when its SSL\/TLS certificate is rotated. Only customers who do not use SSL\/TLS should use this operation."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "EC2",
40
+ "description": "This release introduces the ability to tag key pairs, placement groups, export tasks, import image tasks, import snapshot tasks and export image tasks. You can use tags to organize and identify your resources for cost allocation. "
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "SecurityHub",
45
+ "description": "Additional resource types are now fully supported in the AWS Security Finding Format (ASFF). These resources include AwsElbv2LoadBalancer, AwsKmsKey, AwsIamRole, AwsSqsQueue, AwsLambdaFunction, AwsSnsTopic, and AwsCloudFrontDistribution. Each of these resource types includes an accompanying resource details object with fields for security finding providers to populate. Updates were made to the AwsIamAccessKey resource details object to include information on principal ID and name. To learn more, visit our documentation on the ASFF."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.130.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Detective",
5
+ "description": "Updated the documentation for Amazon Detective."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Health",
10
+ "description": "With this release, you can now centrally aggregate AWS Health events from all accounts in your AWS organization. Visit AWS Health documentation to learn more about enabling and using this feature: https:\/\/docs.aws.amazon.com\/health\/latest\/ug\/organizational-view-health.html. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "FSx",
15
+ "description": "This release adds a new family of APIs (create-data-repository-task, describe-data-repository-task, and cancel-data-repository-task) that allow users to perform operations between their file system and its linked data repository."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.130.3 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CostExplorer",
5
+ "description": "Documentation updates for GetReservationUtilization for the Cost Explorer API."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "LexModelBuildingService",
10
+ "description": "Documentation updates for Amazon Lex."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Lightsail",
15
+ "description": "This release adds support for Certificate Authority (CA) certificate identifier to managed databases in Amazon Lightsail."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ECR",
20
+ "description": "Adds waiters for ImageScanComplete and LifecyclePolicyPreviewComplete"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.131.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "CloudFront",
5
+ "description": "Modifies CloudFront Signer to accept a passphrase for the key file. Modifies Signer test to use a fixed test key file."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "",
10
+ "description": "Add support for Guzzle7."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "This release supports service providers configuring a private DNS name for services other than AWS services and services available in the AWS marketplace. This feature allows consumers to access the service using an existing DNS name without making changes to their applications."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "MediaPackage",
20
+ "description": "You can now restrict direct access to AWS Elemental MediaPackage by securing requests for live content using CDN authorization. With CDN authorization, content requests require a specific HTTP header and authorization code."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Comprehend",
25
+ "description": "Amazon Comprehend now supports Multilabel document classification"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.132.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Adds support for the 'AWS_CONFIG_FILE' environment variable to set the default config file location. This is implemented for all configuration provider classes extending AbstractConfigurationProvider."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeBuild",
10
+ "description": "Add encryption key override to StartBuild API in AWS CodeBuild."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "XRay",
15
+ "description": "Documentation updates for xray"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "MigrationHub",
20
+ "description": "ListApplicationStates API provides a list of all application migration states"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.132.1 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ApiGatewayV2",
5
+ "description": "Adds an alias 'GetApiResource' for the 'GetApi' operation to avoid a naming conflict with the generic AwsClient 'GetApi' method."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Translate",
10
+ "description": "This release adds a new family of APIs for asynchronous batch translation service that provides option to translate large collection of text or HTML documents stored in Amazon S3 folder. This service accepts a batch of up to 5 GB in size per API call with each document not exceeding 1 MB size and the number of documents not exceeding 1 million per batch. See documentation for more information. "
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "CostExplorer",
15
+ "description": "Documentation updates for CreateCostCategoryDefinition and UpdateCostCategoryDefinition API"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "FMS",
20
+ "description": "AWS Firewall Manager now supports tagging, and tag-based access control, of policies."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.132.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "STS",
5
+ "description": "Documentation updates for sts"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CloudWatchLogs",
10
+ "description": "Documentation updates for logs"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.132.3 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CloudFront",
5
+ "description": "CloudFront Signer now accepts PEM formatted private keys stored as variables in addition to the path to a key file."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Transfer",
10
+ "description": "This release introduces a new endpoint type that allows you to attach Elastic IP addresses from your AWS account with your server's endpoint directly and whitelist access to your server by client's internet IP address(es) using VPC Security Groups."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "SageMaker ListTrialComponents API filter by TrialName and ExperimentName."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Chime",
20
+ "description": "Add shared profile support to new and existing users"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "RDS",
25
+ "description": "This release adds an operation that enables users to override the system-default SSL\/TLS certificate for new Amazon RDS DB instances temporarily, or remove the customer override."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "WorkSpaces",
30
+ "description": "Added the migrate feature to Amazon WorkSpaces."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "EC2",
35
+ "description": "This release introduces the ability to tag egress only internet gateways, local gateways, local gateway route tables, local gateway virtual interfaces, local gateway virtual interface groups, local gateway route table VPC association and local gateway route table virtual interface group association. You can use tags to organize and identify your resources for cost allocation. "
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.132.4 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Backup",
5
+ "description": "Cross-region backup is a new AWS Backup feature that allows enterprises to copy backups across multiple AWS services to different regions. "
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "EC2",
10
+ "description": "Documentation updates for the StopInstances API. You can now stop and start an Amazon EBS-backed Spot Instance at will, instead of relying on the Stop interruption behavior to stop your Spot Instances when interrupted."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EFS",
15
+ "description": "This release adds support for managing EFS file system policies and EFS Access Points."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.132.5 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release adds support for partition placement groups and instance metadata option in Launch Templates"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.0 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Added retry for EC2ThrottledException"
6
+ },
7
+ {
8
+ "type": "bugfix",
9
+ "category": "Test\\Integ",
10
+ "description": "Modify S3 integration context event hooks, as well as retry logic to take into account S3 eventual consistency characteristics."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "General Update to EC2 Docs and SDKs"
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "Organizations",
20
+ "description": "Updated description for PolicyID parameter and ConstraintViolationException."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SecurityHub",
25
+ "description": "Add support for DescribeStandardsControls and UpdateStandardsControl. These new Security Hub API operations are used to track and manage whether a compliance standards control is enabled."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "SSM",
30
+ "description": "Document updates for Patch Manager 'NoReboot' feature."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.1 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Client VPN now supports Port Configuration for VPN Endpoints, allowing usage of either port 443 or port 1194."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DirectoryService",
10
+ "description": "To reduce the number of errors our customers are facing, we have modified the requirements of input parameters for two of Directory Service APIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "This release adds two new APIs (UpdateWorkforce and DescribeWorkforce) to SageMaker Ground Truth service for workforce IP whitelisting."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.10 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "imagebuilder",
5
+ "description": "This version of the SDK includes bug fixes and documentation updates."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "RDS",
10
+ "description": "Documentation updates for RDS: when restoring a DB cluster from a snapshot, must create DB instances"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RoboMaker",
15
+ "description": "This release adds support for simulation job batches"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.11 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "DocDB",
5
+ "description": "Added clarifying information that Amazon DocumentDB shares operational technology with Amazon RDS and Amazon Neptune."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "KMS",
10
+ "description": "The ConnectCustomKeyStore API now provides a new error code (SUBNET_NOT_FOUND) for customers to better troubleshoot if their \"connect-custom-key-store\" operation fails."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.12 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CognitoIdentityProvider",
5
+ "description": "Features:This release adds a new setting for a user pool to allow if customer wants their user signup\/signin with case insensitive username. The current default setting is case sensitive, and for our next release we will change it to case insensitive."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudFormation",
10
+ "description": "This release of AWS CloudFormation StackSets allows you to centrally manage deployments to all the accounts in your organization or specific organizational units (OUs) in AWS Organizations. You will also be able to enable automatic deployments to any new accounts added to your organization or OUs. The permissions needed to deploy across accounts will automatically be taken care of by the StackSets service."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "Amazon EC2 Now Supports Tagging Spot Fleet."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.13 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3",
5
+ "description": "Fixing incorrect detection of host-style endpoint pattern while using IP address"
6
+ },
7
+ {
8
+ "type": "bugfix",
9
+ "category": "S3\\Transfer",
10
+ "description": "Fix handling of 'debug' values different than true and valid resources."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticsearchService",
15
+ "description": "Amazon Elasticsearch Service now offers fine-grained access control, which adds multiple capabilities to give tighter control over data. New features include the ability to use roles to define granular permissions for indices, documents, or fields and to extend Kibana with read-only views and secure multi-tenant support."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "WorkMail",
20
+ "description": "This release adds support for access control rules management in Amazon WorkMail."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "DirectoryService",
25
+ "description": "Release to add the ExpirationDateTime as an output to ListCertificates so as to ease customers to look into their certificate lifetime and make timely decisions about renewing them."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "Chime",
30
+ "description": "Documentation updates for Amazon Chime"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "EC2",
35
+ "description": "This release adds support for tagging public IPv4 pools."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Neptune",
40
+ "description": "This launch enables Neptune start-db-cluster and stop-db-cluster. Stopping and starting Amazon Neptune clusters helps you manage costs for development and test environments. You can temporarily stop all the DB instances in your cluster, instead of setting up and tearing down all the DB instances each time that you use the cluster."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "Glue",
45
+ "description": "Adding ability to add arguments that cannot be overridden to AWS Glue jobs"
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.14 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "MediaPackageVod",
5
+ "description": "Adds support for DASH with multiple media presentation description periods triggered by presence of SCTE-35 ad markers in the manifest.Also adds optional configuration for DASH SegmentTemplateFormat to refer to segments by Number with Duration, Number with Timeline or Time with Timeline and compact the manifest by combining duplicate SegmentTemplate tags."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.15 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Build\\Docs",
5
+ "description": "Adds customization in docs redirect map builder to avoid service name conflict."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Test\\S3",
10
+ "description": "Adds a test to verify S3 CopyObject functionality with a bucket ARN for the CopySource."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SecurityHub",
15
+ "description": "Security Hub has released a new DescribeStandards API action. This API action allows a customer to list all of the standards available in an account. For each standard, the list provides the customer with the standard name, description, and ARN. Customers can use the ARN as an input to the BatchEnableStandards API action. To learn more, visit our API documentation."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "You can now enable Multi-Attach on Provisioned IOPS io1 volumes through the create-volume API."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MediaTailor",
25
+ "description": "AWS Elemental MediaTailor SDK now allows configuration of Personalization Threshold for HLS and DASH streams."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Shield",
30
+ "description": "This release adds support for associating Amazon Route 53 health checks to AWS Shield Advanced protected resources."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.16 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DynamoDB",
5
+ "description": "Amazon DynamoDB enables you to restore your DynamoDB backup or table data across AWS Regions such that the restored table is created in a different AWS Region from where the source table or backup resides. You can do cross-region restores between AWS commercial Regions, AWS China Regions, and AWS GovCloud (US) Regions. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Rekognition",
10
+ "description": "This update adds the ability to detect text in videos and adds filters to image and video text detection."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Cloud9",
15
+ "description": "AWS Cloud9 now supports the ability to tag Cloud9 development environments. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "Documentation updates for EC2"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.17 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AutoScaling",
5
+ "description": "Amazon EC2 Auto Scaling now supports the ability to enable\/disable target tracking, step scaling, and simple scaling policies."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Chime",
10
+ "description": "Added AudioFallbackUrl to support Chime SDK client."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RDS",
15
+ "description": "This release supports Microsoft Active Directory authentication for Amazon Aurora."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.18 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "AutoScaling",
5
+ "description": "Doc update for EC2 Auto Scaling: Add Enabled parameter for PutScalingPolicy"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Lambda",
10
+ "description": "AWS Lambda now supports Ruby 2.7"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ServiceCatalog",
15
+ "description": "\"ListPortfolioAccess\" API now has a new optional parameter \"OrganizationParentId\". When it is provided and if the portfolio with the \"PortfolioId\" given was shared with an organization or organizational unit with \"OrganizationParentId\", all accounts in the organization sub-tree under parent which inherit an organizational portfolio share will be listed, rather than all accounts with external shares. To accommodate long lists returned from the new option, the API now supports pagination."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.19 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SavingsPlans",
5
+ "description": "Added support for AWS Lambda in Compute Savings Plans"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppConfig",
10
+ "description": "This release adds exponential growth type support for deployment strategies."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Pinpoint",
15
+ "description": "As of this release of the Amazon Pinpoint API, the Title property is optional for the CampaignEmailMessage object. "
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.2 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "This release provides a public preview for specifying Amazon EFS file systems as volumes in your Amazon ECS task definitions."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudHSMV2",
10
+ "description": "This release introduces resource-level and tag-based access control for AWS CloudHSM resources. You can now tag CloudHSM backups, tag CloudHSM clusters on creation, and tag a backup as you copy it to another region."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Redshift",
15
+ "description": "Documentation updates for redshift"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Neptune",
20
+ "description": "This release includes Deletion Protection for Amazon Neptune databases."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MediaConvert",
25
+ "description": "AWS Elemental MediaConvert SDK has added support for MP3 audio only outputs."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Batch",
30
+ "description": "This release ensures INACTIVE job definitions are permanently deleted after 180 days."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.20 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "imagebuilder",
5
+ "description": "This release of EC2 Image Builder increases the maximum policy document size for Image Builder resource-based policy APIs."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "WAFV2",
10
+ "description": "Documentation updates for AWS WAF (wafv2) to correct the guidance for associating a web ACL to a CloudFront distribution."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Redshift",
15
+ "description": "Extend elastic resize to support resizing clusters to different instance types."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.21 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EventBridge",
5
+ "description": "This release allows you to create and manage tags for event buses."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "IoTEvents",
10
+ "description": "Documentation updates for iotcolumbo"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "FSx",
15
+ "description": "Announcing persistent file systems for Amazon FSx for Lustre that are ideal for longer-term storage and workloads, and a new generation of scratch file systems that offer higher burst throughput for spiky workloads."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Snowball",
20
+ "description": "AWS Snowball adds a field for entering your GSTIN when creating AWS Snowball jobs in the Asia Pacific (Mumbai) region. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CloudWatchEvents",
25
+ "description": "This release allows you to create and manage tags for event buses."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "DocDB",
30
+ "description": "Documentation updates for docdb"
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.22 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Outposts",
5
+ "description": "This release adds DeleteSite and DeleteOutpost. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SecretsManager",
10
+ "description": "This release increases the maximum allowed size of SecretString or SecretBinary from 10KB to 64KB in the CreateSecret, UpdateSecret, PutSecretValue and GetSecretValue APIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Kafka",
15
+ "description": "Amazon MSK has added support for Broker Log delivery to CloudWatch, S3, and Firehose."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SFN",
20
+ "description": "This release adds support for CloudWatch Logs for Standard Workflows."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.23 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release changes the RunInstances CLI and SDK's so that if you do not specify a client token, a randomly generated token is used for the request to ensure idempotency."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SecurityHub",
10
+ "description": "Security Hub has added to the DescribeProducts API operation a new response field called IntegrationTypes. The IntegrationTypes field lists the types of actions that a product performs relative to Security Hub such as send findings to Security Hub and receive findings from Security Hub."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "SageMaker UpdateEndpoint API now supports retained variant properties, e.g., instance count, variant weight. SageMaker ListTrials API filter by TrialComponentName. Make ExperimentConfig name length limits consistent with CreateExperiment, CreateTrial, and CreateTrialComponent APIs."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "TranscribeService",
20
+ "description": "Amazon Transcribe's Automatic Content Redaction feature enables you to automatically redact sensitive personally identifiable information (PII) from transcription results. It replaces each instance of an identified PII utterance with a [PII] tag in the transcript."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.24 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lightsail",
5
+ "description": "Adds support to create notification contacts in Amazon Lightsail, and to create instance, database, and load balancer metric alarms that notify you based on the value of a metric relative to a threshold that you specify."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "GlobalAccelerator",
10
+ "description": "This release adds support for adding tags to accelerators and bringing your own IP address to AWS Global Accelerator (BYOIP)."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.25 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AugmentedAIRuntime",
5
+ "description": "This release updates Amazon Augmented AI ListHumanLoops API, DescribeHumanLoop response, StartHumanLoop response and type names of SDK fields. "
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "WorkDocs",
10
+ "description": "Documentation updates for workdocs"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AppMesh",
15
+ "description": "App Mesh now supports Transport Layer Security (TLS) between Virtual Nodes in a Mesh. Customers can use managed certificates from an AWS Certificate Manager Private Certificate Authority or bring their own certificates from the local file system to encrypt traffic between their workloads. See https:\/\/docs.aws.amazon.com\/app-mesh\/latest\/userguide\/virtual-node-tls.html for details."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "AccessAnalyzer",
20
+ "description": "This release includes improvements and fixes bugs for the IAM Access Analyzer feature."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "CodeGuruProfiler",
25
+ "description": "Documentation updates for Amazon CodeGuru Profiler"
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "ElasticLoadBalancingv2",
30
+ "description": "Added a target group attribute to support sticky sessions for Network Load Balancers."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "QuickSight",
35
+ "description": "Added SearchDashboards API that allows listing of dashboards that a specific user has access to."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Glue",
40
+ "description": "AWS Glue adds resource tagging support for Machine Learning Transforms and adds a new API, ListMLTransforms to support tag filtering. With this feature, customers can use tags in AWS Glue to organize and control access to Machine Learning Transforms. "
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "ConfigService",
45
+ "description": "Accepts a structured query language (SQL) SELECT command and an aggregator name, performs the corresponding search on resources aggregated by the aggregator, and returns resource configurations matching the properties."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.26 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "Correcting list of supported resource types."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.27 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ComprehendMedical",
5
+ "description": "New Time Expression feature, part of DetectEntitiesV2 API will provide temporal relations to existing NERe entities such as Medication, Test, Treatment, Procedure and Medical conditions. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudWatch",
10
+ "description": "Introducing Amazon CloudWatch Composite Alarms"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.28 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Amazon VPC Flow Logs adds support for tags and tagging on resource creation."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.29 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Build",
5
+ "description": "Add custom retry handling for github release artifact uploads to handle github API quirks."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Pinpoint",
10
+ "description": "This release of the Amazon Pinpoint API introduces support for integrating recommender models with email, push notification, and SMS message templates. You can now use these types of templates to connect to recommender models and add personalized recommendations to messages that you send from campaigns and journeys."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.3 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AlexaForBusiness",
5
+ "description": "Add support for CreatedTime and ConnectionStatusUpdatedTime in response of SearchDevices API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "KMS",
10
+ "description": "The ConnectCustomKeyStore operation now provides new error codes (USER_LOGGED_IN and USER_NOT_FOUND) for customers to better troubleshoot if their connect custom key store operation fails. Password length validation during CreateCustomKeyStore now also occurs on the client side. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "This release provides support for a preview of bringing your own IPv6 addresses (BYOIP for IPv6) for use in AWS."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudWatch",
20
+ "description": "Updating DescribeAnomalyDetectors API to return AnomalyDetector Status value in response."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Lambda",
25
+ "description": "Added reason codes to StateReasonCode (InvalidSubnet, InvalidSecurityGroup) and LastUpdateStatusReasonCode (SubnetOutOfIPAddresses, InvalidSubnet, InvalidSecurityGroup) for functions that connect to a VPC."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "ApplicationInsights",
30
+ "description": "This release adds support for a list API to retrieve the configuration events logged during periodic updates to an application by Amazon CloudWatch Application Insights. "
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.30 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EKS",
5
+ "description": "Amazon EKS now supports adding a KMS key to your cluster for envelope encryption of Kubernetes secrets."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "OpsWorksCM",
10
+ "description": "Updated the Tag regex pattern to align with AWS tagging APIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "You can now create AWS Client VPN Endpoints with a specified VPC and Security Group. Additionally, you can modify these attributes when modifying the endpoint. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "GuardDuty",
20
+ "description": "Add a new finding field for EC2 findings indicating the instance's local IP address involved in the threat."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.31 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GuardDuty",
5
+ "description": "Amazon GuardDuty findings now include the OutpostArn if the finding is generated for an AWS Outposts EC2 host."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppMesh",
10
+ "description": "App Mesh now supports sharing a Mesh with other AWS accounts. Customers can use AWS Resource Access Manager to share their Mesh with other accounts in their organization to connection applications within a single service mesh. See https:\/\/docs.aws.amazon.com\/app-mesh\/latest\/userguide\/sharing.html for details."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RoboMaker",
15
+ "description": "Added support for streaming a GUI from robot and simulation applications"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "This release provides customers with a self-service option to enable Local Zones."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "signer",
25
+ "description": "This release enables signing image format override in PutSigningProfile requests, adding two more enum fields, JSONEmbedded and JSONDetached. This release also extends the length limit of SigningProfile name from 20 to 64."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.32 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DatabaseMigrationService",
5
+ "description": "Added new settings for Kinesis target to include detailed transaction info; to capture table DDL details; to use single-line unformatted json, which can be directly queried by AWS Athena if data is streamed into S3 through AWS Kinesis Firehose. Added CdcInsertsAndUpdates in S3 target settings to allow capture ongoing insertions and updates only."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Amazon Virtual Private Cloud (VPC) NAT Gateway adds support for tagging on resource creation."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MediaLive",
15
+ "description": "AWS Elemental MediaLive now supports the ability to configure the Preferred Channel Pipeline for channels contributing to a Multiplex."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.33 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServerlessApplicationRepository",
5
+ "description": "AWS Serverless Application Repository now supports sharing applications privately with AWS Organizations."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "TranscribeService",
10
+ "description": "Amazon Transcribe's Automatic Content Redaction feature enables you to automatically redact sensitive personally identifiable information (PII) from transcription results. It replaces each instance of an identified PII utterance with a [PII] tag in the transcript."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MarketplaceCommerceAnalytics",
15
+ "description": "Change the disbursement data set to look past 31 days instead until the beginning of the month."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "Documentation updates for EC2"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "IoTEvents",
25
+ "description": "API update that adds a new parameter, durationExpression, to SetTimerAction, and deprecates seconds"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.34 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Redshift",
5
+ "description": "Amazon Redshift now supports operations to pause and resume a cluster on demand or on a schedule."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "EFS",
10
+ "description": "Documentation updates for elasticfilesystem"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.35 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IoT",
5
+ "description": "As part of this release, we are extending capability of AWS IoT Rules Engine to support IoT Cloudwatch log action. The IoT Cloudwatch log rule action lets you send messages from IoT sensors and applications to Cloudwatch logs for troubleshooting and debugging."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "LexModelBuildingService",
10
+ "description": "Amazon Lex now supports tagging for bots, bot aliases and bot channels. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "Documentation updates for EC2"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ApiGatewayV2",
20
+ "description": "Amazon API Gateway HTTP APIs is now generally available. HTTP APIs offer the core functionality of REST API at up to 71% lower price compared to REST API, 60% lower p99 latency, and is significantly easier to use. As part of general availability, we added new features to route requests to private backends such as private ALBs, NLBs, and IP\/ports. We also brought over a set of features from REST API such as Stage Variables, and Stage\/Route level throttling. Custom domain names can also now be used with both REST And HTTP APIs."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SecurityHub",
25
+ "description": "The AWS Security Finding Format is being augmented with the following changes. 21 new resource types without corresponding details objects are added. Another new resource type, AwsS3Object, has an accompanying details object. Severity.Label is a new string field that indicates the severity of a finding. The available values are: INFORMATIONAL, LOW, MEDIUM, HIGH, CRITICAL. The new string field Workflow.Status indicates the status of the investigation into a finding. The available values are: NEW, NOTIFIED, RESOLVED, SUPPRESSED."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.36 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "AppConfig",
5
+ "description": "This release adds S3 as a configuration source provider."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.37 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "Resource data sync for AWS Systems Manager Inventory now includes destination data sharing. This feature enables you to synchronize inventory data from multiple AWS accounts into a central Amazon S3 bucket. To use this feature, all AWS accounts must be listed in AWS Organizations."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECS",
10
+ "description": "This release adds the ability to update the task placement strategy and constraints for Amazon ECS services."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CognitoIdentityProvider",
15
+ "description": "Additional response field \"CompromisedCredentialsDetected\" added to AdminListUserAuthEvents."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElastiCache",
20
+ "description": "Amazon ElastiCache now supports Global Datastore for Redis. Global Datastore for Redis offers fully managed, fast, reliable and secure cross-region replication. Using Global Datastore for Redis, you can create cross-region read replica clusters for ElastiCache for Redis to enable low-latency reads and disaster recovery across regions. You can create, modify and describe a Global Datastore, as well as add or remove regions from your Global Datastore and promote a region as primary in Global Datastore."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "S3Control",
25
+ "description": "Amazon S3 now supports Batch Operations job tagging."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.38 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Crypto",
5
+ "description": "This release fixes a discrepancy between the Encryption\/Decryption trait implementations and AbstractCryptoClient method signature."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConvert",
10
+ "description": "AWS Elemental MediaConvert SDK has added support for: AV1 encoding in File Group MP4, DASH and CMAF DASH outputs; PCM\/WAV audio output in MPEG2-TS containers; and Opus audio in Webm inputs."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.39 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Personalize",
5
+ "description": "[Personalize] Adds support for returning hyperparameter values of the best performing model in a HPO job."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConnect",
10
+ "description": "Feature adds the ability for a flow to have multiple redundant sources that provides resiliency to a source failing. The new APIs added to enable the feature are, AddFlowSources, RemoveFlowSource and UpdateFlow."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RDS",
15
+ "description": "Updated the MaxRecords type in DescribeExportTasks to Integer."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.4 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "IoTEvents",
5
+ "description": "Documentation updates for iotcolumbo"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodePipeline",
10
+ "description": "AWS CodePipeline enables an ability to stop pipeline executions."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MarketplaceCommerceAnalytics",
15
+ "description": "Remove 4 deprecated data sets, change some data sets available dates to 2017-09-15"
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "ApplicationDiscoveryService",
20
+ "description": "Documentation updates for the AWS Application Discovery Service."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EC2",
25
+ "description": "Add an enum value to the result of DescribeByoipCidrs to support CIDRs that are not publicly advertisable."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.40 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ACM",
5
+ "description": "AWS Certificate Manager documentation updated on API calls ImportCertificate and ListCertificate. Specific updates included input constraints, private key size for import and next token size for list."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Outposts",
10
+ "description": "Documentation updates for AWS Outposts."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.41 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServiceCatalog",
5
+ "description": "Added \"productId\" and \"portfolioId\" to responses from CreateConstraint, UpdateConstraint, ListConstraintsForPortfolio, and DescribeConstraint APIs"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.42 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EKS",
5
+ "description": "Adding new error code IamLimitExceeded for Nodegroups in EKS"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Route53",
10
+ "description": "Documentation updates for Route 53."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ApiGatewayV2",
15
+ "description": "Documentation updates to reflect that the default timeout for integrations is now 30 seconds for HTTP APIs."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.43 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "RDSDataService",
5
+ "description": "Documentation updates for rds-data"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EKS",
10
+ "description": "Adding new error codes: Ec2SubnetInvalidConfiguration and NodeCreationFailure for Nodegroups in EKS"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Athena",
15
+ "description": "Documentation updates for Athena, including QueryExecutionStatus QUEUED and RUNNING states. QUEUED now indicates that the query has been submitted to the service. RUNNING indicates that the query is in execution phase."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Organizations",
20
+ "description": "Introduces actions for giving a member account administrative Organizations permissions for an AWS service. You can run this action only for AWS services that support this feature."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.44 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ApplicationInsights",
5
+ "description": "Amazon CloudWatch Application Insights for .NET and SQL Server now integrates with Amazon CloudWatch Events (AWS CodeDeploy, AWS Health and Amazon EC2 state changes). This feature enables customers to view events related to problems detected by CloudWatch Application Insights, and reduce mean-time-to-resolution (MTTR)."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ManagedBlockchain",
10
+ "description": "Amazon Managed Blockchain now has support to publish Hyperledger Fabric peer node, chaincode, and certificate authority (CA) logs to Amazon CloudWatch Logs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "XRay",
15
+ "description": "GetTraceSummaries - Now provides additional root cause attribute ClientImpacting which indicates whether root cause impacted trace client."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CostExplorer",
20
+ "description": "Customers can now receive Savings Plans recommendations at the member (linked) account level."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ElasticsearchService",
25
+ "description": "Adding support for customer packages (dictionary files) to Amazon Elasticsearch Service"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Detective",
30
+ "description": "The new ACCEPTED_BUT_DISABLED member account status indicates that a member account that accepted the invitation is blocked from contributing data to the behavior graph. The reason is provided in the new DISABLED_REASON property. The new StartMonitoringMember operation enables a blocked member account."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.45 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "FSx",
5
+ "description": "This release includes two changes: a new lower-cost, storage type called HDD (Hard Disk Drive), and a new generation of the Single-AZ deployment type called Single AZ 2. The HDD storage type can be selected on Multi AZ 1 and Single AZ 2 deployment types."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SageMaker",
10
+ "description": "This release updates Amazon Augmented AI CreateFlowDefinition API and DescribeFlowDefinition response."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SecurityHub",
15
+ "description": "Security Hub has now made it easier to opt out of default standards when you enable Security Hub. We added a new Boolean parameter to EnableSecurityHub called EnableDefaultStandards. If that parameter is true, Security Hub's default standards are enabled. A new Boolean parameter for standards, EnabledByDefault, indicates whether a standard is a default standard. Today, the only default standard is CIS AWS Foundations Benchmark v1.2. Additional default standards will be added in the future.To learn more, visit our documentation on the EnableSecurityHub API action."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.46 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "kendra",
5
+ "description": "The Amazon Kendra Microsoft SharePoint data source now supports include and exclude regular expressions and change log features. Include and exclude regular expressions enable you to provide a list of regular expressions to match the display URL of SharePoint documents to either include or exclude documents respectively. When you enable the changelog feature it enables Amazon Kendra to use the SharePoint change log to determine which documents to update in the index."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ServiceCatalog",
10
+ "description": "Added \"LocalRoleName\" as an acceptable Parameter for Launch type in CreateConstraint and UpdateConstraint APIs"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GlobalAccelerator",
15
+ "description": "This update adds an event history to the ListByoipCidr API call. This enables you to see the changes that you've made for an IP address range that you bring to AWS Global Accelerator through bring your own IP address (BYOIP)."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.47 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AccessAnalyzer",
5
+ "description": "This release adds support for the creation and management of IAM Access Analyzer analyzers with type organization. An analyzer with type organization continuously monitors all supported resources within the AWS organization and reports findings when they allow access from outside the organization."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.5 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "This SDK release introduces APIs that automate the export of Amazon RDS snapshot data to Amazon S3. The new APIs include: StartExportTask, CancelExportTask, DescribeExportTasks. These APIs automate the extraction of data from an RDS snapshot and export it to an Amazon S3 bucket. The data is stored in a compressed, consistent, and query-able format. After the data is exported, you can query it directly using tools such as Amazon Athena or Redshift Spectrum. You can also consume the data as part of a data lake solution. If you archive the data in S3 Infrequent Access or Glacier, you can reduce long term data storage costs by applying data lifecycle policies."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IAM",
10
+ "description": "This release enables the Identity and Access Management policy simulator to simulate permissions boundary policies."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.6 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EKS",
5
+ "description": "Adding new error codes for Nodegroups in EKS"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "OpsWorksCM",
10
+ "description": "AWS OpsWorks for Chef Automate now supports in-place upgrade to Chef Automate 2. Eligible servers can be updated through the management console, CLI and APIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "DataSync",
15
+ "description": "AWS DataSync now supports FSx for Windows File Server Locations"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ECS",
20
+ "description": "This release provides support for tagging Amazon ECS task sets for services using external deployment controllers."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "WorkSpaces",
25
+ "description": "Documentation updates for WorkSpaces"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.7 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Amazon VPC Flow Logs adds support for 1-minute aggregation intervals."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "This feature ensures that an instance is patched up to the available patches on a particular date. It can be enabled by selecting the 'ApproveUntilDate' option as the auto-approval rule while creating the patch baseline. ApproveUntilDate - The cutoff date for auto approval of released patches. Any patches released on or before this date will be installed automatically."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Kafka",
15
+ "description": "This release enables AWS MSK customers to list Apache Kafka versions that are supported on AWS MSK clusters. Also includes changes to expose additional details of a cluster's state in DescribeCluster and ListClusters APIs."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "CloudFront",
20
+ "description": "Documentation updates for CloudFront"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "WorkMail",
25
+ "description": "This release adds support for tagging Amazon WorkMail organizations."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "StorageGateway",
30
+ "description": "Adding KVM as a support hypervisor"
31
+ },
32
+ {
33
+ "type": "enhancement",
34
+ "category": "IoT",
35
+ "description": "Updated ThrottlingException documentation to report that the error code is 400, and not 429, to reflect actual system behaviour."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.8 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GroundStation",
5
+ "description": "Adds dataflowEndpointRegion property to DataflowEndpointConfig. The dateCreated, lastUpdated, and tags properties on GetSatellite have been deprecated."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SecurityHub",
10
+ "description": "Additional resource types are now supported in the AWS Security Finding Format (ASFF). The following new resource types are added, each having an accompanying resource details object with fields for security finding providers to populate: AwsCodeBuildProject, AwsEc2NetworkInterface, AwsEc2SecurityGroup, AwsElasticsearchDomain, AwsLambdaLayerVersion, AwsRdsDbInstance, and AwsWafWebAcl. The following resource types are added without an accompanying details object: AutoscalingAutoscalingGroup, AwsDynamoDbTable, AwsEc2Eip, AwsEc2Snapshot, AwsEc2Volume, AwsRdsDbSnapshot, AwsRedshiftCluster, and AwsS3Object. The number of allowed resources per finding is increased from 10 to 32. A new field is added in the Compliance object, RelatedRequirements. To learn more, visit our documentation on the ASFF."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "DLM",
15
+ "description": "Updated the maximum number of tags that can be added to a snapshot using DLM to 45."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "This release provides support for tagging when you create a VPC endpoint, or VPC endpoint service."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "ForecastQueryService",
25
+ "description": "Documentation updates for Amazon Forecast."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "ResourceGroupsTaggingAPI",
30
+ "description": "Documentation-only update that adds services to the list of supported services."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "MediaConvert",
35
+ "description": "AWS Elemental MediaConvert SDK has added support for fine-tuned QVBR quality level."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.133.9 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeBuild",
5
+ "description": "AWS CodeBuild adds support for Amazon Elastic File Systems"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppSync",
10
+ "description": "AWS AppSync now supports X-Ray"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ECR",
15
+ "description": "This release contains updated text for the GetAuthorizationToken API."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "EBS",
20
+ "description": "Documentation updates for EBS direct APIs."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EC2",
25
+ "description": "This release adds platform details and billing info to the DescribeImages API."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "LexModelBuildingService",
30
+ "description": "Amazon Lex now supports AMAZON.AlphaNumeric with regular expressions."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.0 ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Adds support for standard and adaptive retry modes. Standard mode adds a retry quota system, while the experimental adaptive mode adds a client-side rate limiting feature on top of standard mode."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "WAFV2",
10
+ "description": "Added support for AWS Firewall Manager for WAFv2 and PermissionPolicy APIs for WAFv2."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AppConfig",
15
+ "description": "This release adds an event log to deployments. In the case of a deployment rollback, the event log details the rollback reason."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "FMS",
20
+ "description": "This release contains FMS wafv2 support."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ElasticInference",
25
+ "description": "This release includes improvements for the Amazon Elastic Inference service."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "OpsWorksCM",
30
+ "description": "Documentation updates for OpsWorks-CM CreateServer values."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "MediaStore",
35
+ "description": "This release adds support for CloudWatch Metrics. You can now set a policy on your container to dictate which metrics MediaStore sends to CloudWatch."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Rekognition",
40
+ "description": "This release adds DeleteProject and DeleteProjectVersion APIs to Amazon Rekognition Custom Labels."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "Glue",
45
+ "description": "Add two enums for MongoDB connection: Added \"CONNECTION_URL\" to \"ConnectionPropertyKey\" and added \"MONGODB\" to \"ConnectionType\""
46
+ },
47
+ {
48
+ "type": "enhancement",
49
+ "category": "Detective",
50
+ "description": "Removing the notes that Detective is in preview, in preparation for the Detective GA release."
51
+ },
52
+ {
53
+ "type": "api-change",
54
+ "category": "Lambda",
55
+ "description": "AWS Lambda now supports .NET Core 3.1"
56
+ },
57
+ {
58
+ "type": "enhancement",
59
+ "category": "Organizations",
60
+ "description": "Documentation updates for AWS Organizations"
61
+ },
62
+ {
63
+ "type": "api-change",
64
+ "category": "Pinpoint",
65
+ "description": "This release of the Amazon Pinpoint API introduces MMS support for SMS messages."
66
+ },
67
+ {
68
+ "type": "api-change",
69
+ "category": "StorageGateway",
70
+ "description": "Adding audit logging support for SMB File Shares"
71
+ }
72
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IoT",
5
+ "description": "This release introduces Dimensions for AWS IoT Device Defender. Dimensions can be used in Security Profiles to collect and monitor fine-grained metrics."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConnect",
10
+ "description": "You can now send content from your virtual private cloud (VPC) to your MediaConnect flow without going over the public internet."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.2 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "RDS",
5
+ "description": "Documentation updates for RDS: creating read replicas is now supported for SQL Server DB instances"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Redshift",
10
+ "description": "Documentation updates for redshift"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GameLift",
15
+ "description": "Public preview of GameLift FleetIQ as a standalone feature. GameLift FleetIQ makes it possible to use low-cost Spot instances by limiting the chance of interruptions affecting game sessions. FleetIQ is a feature of the managed GameLift service, and can now be used with game hosting in EC2 Auto Scaling groups that you manage in your own account."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudWatch",
20
+ "description": "Amazon CloudWatch Contributor Insights adds support for tags and tagging on resource creation. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MediaLive",
25
+ "description": "AWS Elemental MediaLive now supports Automatic Input Failover. This feature provides resiliency upstream of the channel, before ingest starts."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.3 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RoboMaker",
5
+ "description": "Added support for limiting simulation unit usage, giving more predictable control over simulation cost"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "PersonalizeRuntime",
10
+ "description": "Amazon Personalize: Add new response field \"score\" to each item returned by GetRecommendations and GetPersonalizedRanking (HRNN-based recipes only)"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.4 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "IAM",
5
+ "description": "Documentation updates for AWS Identity and Access Management (IAM)."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Chime",
10
+ "description": "Amazon Chime proxy phone sessions let you provide two users with a shared phone number to communicate via voice or text for up to 12 hours without revealing personal phone numbers. When users call or message the provided phone number, they are connected to the other party and their private phone numbers are replaced with the shared number in Caller ID."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "TranscribeService",
15
+ "description": "This release adds support for batch transcription jobs within Amazon Transcribe Medical."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElasticBeanstalk",
20
+ "description": "This release adds a new action, ListPlatformBranches, and updates two actions, ListPlatformVersions and DescribePlatformVersion, to support the concept of Elastic Beanstalk platform branches."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.5 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeGuruReviewer",
5
+ "description": "API updates for CodeGuruReviewer "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConnect",
10
+ "description": "You can now send content from your MediaConnect flow to your virtual private cloud (VPC) without going over the public internet."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "APIGateway",
15
+ "description": "Documentation updates for Amazon API Gateway."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.6 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release provides the ability to include tags in EC2 event notifications. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeGuruProfiler",
10
+ "description": "CodeGuruProfiler adds support for resource based authorization to submit profile data."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "CloudFormation",
15
+ "description": "The OrganizationalUnitIds parameter on StackSet and the OrganizationalUnitId parameter on StackInstance, StackInstanceSummary, and StackSetOperationResultSummary are now reserved for internal use. No data is returned for this parameter."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "MigrationHubConfig",
20
+ "description": "Adding ThrottlingException"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MediaConvert",
25
+ "description": "AWS Elemental MediaConvert SDK adds support for queue hopping. Jobs can now hop from their original queue to a specified alternate queue, based on the maximum wait time that you specify in the job settings."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "ECS",
30
+ "description": "This release provides native support for specifying Amazon EFS file systems as volumes in your Amazon ECS task definitions."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Chime",
35
+ "description": "feature: Chime: This release introduces the ability to tag Amazon Chime SDK meeting resources. You can use tags to organize and identify your resources for cost allocation. "
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.7 ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "This release adds support for Amazon RDS Proxy with PostgreSQL compatibility."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaTailor",
10
+ "description": "AWS Elemental MediaTailor SDK now allows configuration of Avail Suppression."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SecurityHub",
15
+ "description": "Added a new BatchUpdateFindings action, which allows customers to update selected information about their findings. Security Hub customers use BatchUpdateFindings to track their investigation into a finding. BatchUpdateFindings is intended to replace the UpdateFindings action, which is deprecated."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SageMaker",
20
+ "description": "Amazon SageMaker now supports running training jobs on ml.g4dn and ml.c5n instance types. Amazon SageMaker supports in \"IN\" operation for Search now."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MigrationHub",
25
+ "description": "Adding ThrottlingException"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "MediaConvert",
30
+ "description": "AWS Elemental MediaConvert now allows you to specify your input captions frame rate for SCC captions sources."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "imagebuilder",
35
+ "description": "This release includes support for additional OS Versions within EC2 Image Builder."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "IoTEvents",
40
+ "description": "API update that allows users to customize event action payloads, and adds support for Amazon DynamoDB actions."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "EC2",
45
+ "description": "Amazon EC2 now supports adding AWS resource tags for placement groups and key pairs, at creation time. The CreatePlacementGroup API will now return placement group information when created successfully. The DeleteKeyPair API now supports deletion by resource ID."
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "Snowball",
50
+ "description": "An update to the Snowball Edge Storage Optimized device has been launched. Like the previous version, it has 80 TB of capacity for data transfer. Now it has 40 vCPUs, 80 GiB, and a 1 TiB SATA SSD of memory for EC2 compatible compute. The 80 TB of capacity can also be used for EBS-like volumes for AMIs."
51
+ },
52
+ {
53
+ "type": "enhancement",
54
+ "category": "Lambda",
55
+ "description": "Sample code for AWS Lambda operations"
56
+ },
57
+ {
58
+ "type": "api-change",
59
+ "category": "AugmentedAIRuntime",
60
+ "description": "This release updates Amazon Augmented AI ListHumanLoops and StartHumanLoop APIs."
61
+ },
62
+ {
63
+ "type": "api-change",
64
+ "category": "Glue",
65
+ "description": "This release adds support for querying GetUserDefinedFunctions API without databaseName."
66
+ }
67
+ ]
vendor/aws/aws-sdk-php/.changes/3.134.8 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "OpsWorksCM",
5
+ "description": "Documentation updates for opsworkscm"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "FraudDetector",
10
+ "description": "Added support for a new rule engine execution mode. Customers will be able to configure their detector versions to evaluate all rules and return outcomes from all 'matched' rules in the GetPrediction API response. Added support for deleting Detectors (DeleteDetector) and Rule Versions (DeleteRuleVersion)."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.135.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Synthetics",
5
+ "description": "Introducing CloudWatch Synthetics. This is the first public release of CloudWatch Synthetics."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ApiGatewayV2",
10
+ "description": "You can now export an OpenAPI 3.0 compliant API definition file for Amazon API Gateway HTTP APIs using the Export API."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CostExplorer",
15
+ "description": "Cost Categories API is now General Available with new dimensions and operations support. You can map costs by account name, service, and charge type dimensions as well as use contains, starts with, and ends with operations. Cost Categories can also be used in RI and SP coverage reports."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Glue",
20
+ "description": "Added a new ConnectionType \"KAFKA\" and a ConnectionProperty \"KAFKA_BOOTSTRAP_SERVERS\" to support Kafka connection."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "IoTEvents",
25
+ "description": "API update that allows users to add AWS Iot SiteWise actions while creating Detector Model in AWS Iot Events"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.135.1 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EMR",
5
+ "description": "Amazon EMR adds support for configuring a managed scaling policy for an Amazon EMR cluster. This enables automatic resizing of a cluster to optimize for job execution speed and reduced cluster cost."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Route53Domains",
10
+ "description": "You can now programmatically transfer domains between AWS accounts without having to contact AWS Support"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CostExplorer",
15
+ "description": "Cost Explorer Rightsizing Recommendations integrates with Compute Optimizer and begins offering across instance family rightsizing recommendations, adding to existing support for within instance family rightsizing recommendations. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "GuardDuty",
20
+ "description": "AWS GuardDuty now supports using AWS Organizations delegated administrators to create and manage GuardDuty master and member accounts. The feature also allows GuardDuty to be automatically enabled on associated organization accounts."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.135.2 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeGuruReviewer",
5
+ "description": "Add support for code review and recommendation feedback APIs."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "FMS",
10
+ "description": "This release is to support AWS Firewall Manager policy with Organizational Unit scope. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Redshift",
15
+ "description": "Amazon Redshift support for usage limits"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElasticsearchService",
20
+ "description": "This change adds a new field 'OptionalDeployment' to ServiceSoftwareOptions to indicate whether a service software update is optional or mandatory. If True, it indicates that the update is optional, and the service software is not automatically updated. If False, the service software is automatically updated after AutomatedUpdateDate."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "TranscribeStreamingService",
25
+ "description": "Adding ServiceUnavailableException as one of the expected exceptions"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.135.3 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Endpoint",
5
+ "description": "Fix for partition endpoint history logic for keys with hyphens."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Firehose",
10
+ "description": "You can now deliver streaming data to an Amazon Elasticsearch Service domain in an Amazon VPC. You can now compress streaming data delivered to S3 using Hadoop-Snappy in addition to Gzip, Zip and Snappy formats."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ApplicationAutoScaling",
15
+ "description": "This release supports Auto Scaling in Amazon Keyspaces for Apache Cassandra."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "RAM",
20
+ "description": "AWS Resource Access Manager (RAM) provides a new ListResourceTypes action. This action lets you list the resource types that can be shared using AWS RAM."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "StorageGateway",
25
+ "description": "Added AutomaticTapeCreation APIs"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Pinpoint",
30
+ "description": "This release of the Amazon Pinpoint API enhances support for sending campaigns through custom channels to locations such as AWS Lambda functions or web applications. Campaigns can now use CustomDeliveryConfiguration and CampaignCustomMessage to configure custom channel settings for a campaign."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "MediaPackageVod",
35
+ "description": "Adds tagging support for PackagingGroups, PackagingConfigurations, and Assets"
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Transfer",
40
+ "description": "This release adds support for transfers over FTPS and FTP in and out of Amazon S3, which makes it easy to migrate File Transfer Protocol over SSL (FTPS) and FTP workloads to AWS, in addition to the existing support for Secure File Transfer Protocol (SFTP)."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "RDS",
45
+ "description": "Adds support for AWS Local Zones, including a new optional parameter AvailabilityZoneGroup for the DescribeOrderableDBInstanceOptions operation."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.135.4 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IoT",
5
+ "description": "This release adds a new exception type to the AWS IoT SetV2LoggingLevel API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticInference",
10
+ "description": "This feature allows customers to describe the accelerator types and offerings on any region where Elastic Inference is available."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "DLM",
15
+ "description": "Enable 1hour frequency in the schedule creation for Data LifeCycle Manager."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.135.5 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SageMaker",
5
+ "description": "Change to the input, ResourceSpec, changing EnvironmentArn to SageMakerImageArn. This affects the following preview APIs: CreateDomain, DescribeDomain, UpdateDomain, CreateUserProfile, DescribeUserProfile, UpdateUserProfile, CreateApp and DescribeApp."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AccessAnalyzer",
10
+ "description": "This release adds support for inclusion of S3 Access Point policies in IAM Access Analyzer evaluation of S3 bucket access. IAM Access Analyzer now reports findings for buckets shared through access points and identifies the access point that permits access."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "DataExchange",
15
+ "description": "This release introduces AWS Data Exchange support for configurable encryption parameters when exporting data sets to Amazon S3. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DatabaseMigrationService",
20
+ "description": "Adding minimum replication engine version for describe-endpoint-types api."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.135.6 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECR",
5
+ "description": "This release adds support for multi-architecture images also known as a manifest list"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaLive",
10
+ "description": "AWS Elemental MediaLive now supports several new features: enhanced VQ for H.264 (AVC) output encodes; passthrough of timed metadata and of Nielsen ID3 metadata in fMP4 containers in HLS outputs; the ability to generate a SCTE-35 sparse track without additional segmentation, in Microsoft Smooth outputs; the ability to select the audio from a TS input by specifying the audio track; and conversion of HDR colorspace in the input to an SDR colorspace in the output."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Route53",
15
+ "description": "Amazon Route 53 now supports the Africa (Cape Town) Region (af-south-1) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SSM",
20
+ "description": "SSM State Manager support for adding list association filter for Resource Group and manual mode of managing compliance for an association. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "KinesisVideo",
25
+ "description": "Add \"GET_CLIP\" to the list of supported API names for the GetDataEndpoint API."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "KinesisVideoArchivedMedia",
30
+ "description": "Add support for the GetClip API for retrieving media from a video stream in the MP4 format."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.136.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "IoTSiteWise",
5
+ "description": "AWS IoT SiteWise is a managed service that makes it easy to collect, store, organize and monitor data from industrial equipment at scale. You can use AWS IoT SiteWise to model your physical assets, processes and facilities, quickly compute common industrial performance metrics, and create fully managed web applications to help analyze industrial equipment data, prevent costly equipment issues, and reduce production inefficiencies."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "WAF",
10
+ "description": "This release add migration API for AWS WAF Classic (\"waf\" and \"waf-regional\"). The migration API will parse through your web ACL and generate a CloudFormation template into your S3 bucket. Deploying this template will create equivalent web ACL under new AWS WAF (\"wafv2\")."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ServiceDiscovery",
15
+ "description": "Documentation updates for servicediscovery"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "WAFRegional",
20
+ "description": "This release add migration API for AWS WAF Classic (\"waf\" and \"waf-regional\"). The migration API will parse through your web ACL and generate a CloudFormation template into your S3 bucket. Deploying this template will create equivalent web ACL under new AWS WAF (\"wafv2\")."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "TranscribeService",
25
+ "description": "With this release, you can now use Amazon Transcribe to create medical custom vocabularies and use them in both medical real-time streaming and medical batch transcription jobs."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.0 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "S3",
5
+ "description": "Adds change to S3 parsing logic to correctly interpret certain 200 responses with a functionally empty body as connection errors."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "StorageGateway",
10
+ "description": "Adding support for S3_INTELLIGENT_TIERING as a storage class option"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Lambda",
15
+ "description": "Documentation updates for Lambda"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "IoTEvents",
20
+ "description": "Doc only update to correct APIs and related descriptions"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Schemas",
25
+ "description": "Add support for resource policies for Amazon EventBridge Schema Registry, which is now generally available."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "MediaConvert",
30
+ "description": "AWS Elemental MediaConvert SDK has added support for including AFD signaling in MXF wrapper."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "IoT",
35
+ "description": "AWS IoT Core released Fleet Provisioning for scalable onboarding of IoT devices to the cloud. This release includes support for customer's Lambda functions to validate devices during onboarding. Fleet Provisioning also allows devices to send Certificate Signing Requests (CSR) to AWS IoT Core for signing and getting a unique certificate. Lastly, AWS IoT Core added a feature to register the same certificate for multiple accounts in the same region without needing to register the certificate authority (CA)."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "Added TimeoutSeconds as part of ListCommands API response."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EFS",
10
+ "description": "Change the TagKeys argument for UntagResource to a URL parameter to address an issue with the Java and .NET SDKs."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "S3Control",
5
+ "description": "Amazon S3 Batch Operations now supports Object Lock."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "With this release, you can include enriched metadata in Amazon Virtual Private Cloud (Amazon VPC) flow logs published to Amazon CloudWatch Logs or Amazon Simple Storage Service (S3). Prior to this, custom format VPC flow logs enriched with additional metadata could be published only to S3. With this launch, we are also adding additional metadata fields that provide insights about the location such as AWS Region, AWS Availability Zone, AWS Local Zone, AWS Wavelength Zone, or AWS Outpost where the network interface where flow logs are captured exists. "
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "APIGateway",
15
+ "description": "Documentation updates for Amazon API Gateway"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "With this release, you can call ModifySubnetAttribute with two new parameters: MapCustomerOwnedIpOnLaunch and CustomerOwnedIpv4Pool, to map a customerOwnedIpv4Pool to a subnet. You will also see these two new fields in the DescribeSubnets response. If your subnet has a customerOwnedIpv4Pool mapped, your network interface will get an auto assigned customerOwnedIpv4 address when placed onto an instance."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "AWS Systems Manager Parameter Store launches new data type to support aliases in EC2 APIs"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Support",
15
+ "description": "Documentation updates for support"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.4 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ComprehendMedical",
5
+ "description": "New Batch Ontology APIs for ICD-10 and RxNorm will provide batch capability of linking the information extracted by Comprehend Medical to medical ontologies. The new ontology linking APIs make it easy to detect medications and medical conditions in unstructured clinical text and link them to RxNorm and ICD-10-CM codes respectively. This new feature can help you reduce the cost, time and effort of processing large amounts of unstructured medical text with high accuracy."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeStarconnections",
10
+ "description": "Added support for tagging resources in AWS CodeStar Connections"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.5 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "AppConfig",
5
+ "description": "The description of the AWS AppConfig GetConfiguration API action was amended to include important information about calling ClientConfigurationVersion when you configure clients to call GetConfiguration."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Lightsail",
10
+ "description": "This release adds support for the following options in instance public ports: Specify source IP addresses, specify ICMP protocol like PING, and enable\/disable the Lightsail browser-based SSH and RDP clients' access to your instance."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "This Patch Manager release supports creating patch baselines for Oracle Linux and Debian"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudWatchLogs",
20
+ "description": "Amazon CloudWatch Logs now offers the ability to interact with Logs Insights queries via the new PutQueryDefinition, DescribeQueryDefinitions, and DeleteQueryDefinition APIs."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CodeBuild",
25
+ "description": "Add COMMIT_MESSAGE enum for webhook filter types"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "EC2",
30
+ "description": "Amazon EC2 now adds warnings to identify issues when creating a launch template or launch template version."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Route53",
35
+ "description": "Amazon Route 53 now supports the EU (Milan) Region (eu-south-1) for latency records, geoproximity records, and private DNS for Amazon VPCs in that region."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.6 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SageMaker",
5
+ "description": "This release adds a new parameter (EnableInterContainerTrafficEncryption) to CreateProcessingJob API to allow for enabling inter-container traffic encryption on processing jobs."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "GuardDuty",
10
+ "description": "Documentation updates for GuardDuty"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ResourceGroupsTaggingAPI",
15
+ "description": "Documentation updates for resourcegroupstaggingapi"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.7 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeGuruReviewer",
5
+ "description": "Add Bitbucket integration APIs"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "kendra",
10
+ "description": "Amazon Kendra is now generally available. As part of general availability, we are launching * Developer edition * Ability to scale your Amazon Kendra index with capacity units * Support for new connectors * Support for new tagging API's * Support for Deleting data source * Metrics for data source sync operations * Metrics for query & storage utilization"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "M6g instances are our next-generation general purpose instances powered by AWS Graviton2 processors"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.137.8 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "IoTSiteWise",
5
+ "description": "Documentation updates for iot-bifrost"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "WorkMail",
10
+ "description": "Minor API fixes and updates to the documentation."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.0 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElastiCache",
5
+ "description": "Amazon ElastiCache now supports auto-update of ElastiCache clusters after the \"recommended apply by date\" of service update has passed. ElastiCache will use your maintenance window to schedule the auto-update of applicable clusters. For more information, see https:\/\/docs.aws.amazon.com\/AmazonElastiCache\/latest\/mem-ug\/Self-Service-Updates.html and https:\/\/docs.aws.amazon.com\/AmazonElastiCache\/latest\/red-ug\/Self-Service-Updates.html"
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "Macie2",
10
+ "description": "This release introduces a new major version of the Amazon Macie API. You can use this version of the API to develop tools and applications that interact with the new Amazon Macie."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Amazon EC2 now supports adding AWS resource tags for associations between VPCs and local gateways, at creation time."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "imagebuilder",
10
+ "description": "This release adds a new parameter (SupportedOsVersions) to the Components API. This parameter lists the OS versions supported by a component."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.10 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "WorkMail",
5
+ "description": "This release adds support for Amazon WorkMail organization-level retention policies."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "QLDBSession",
10
+ "description": "Documentation updates for Amazon QLDB Session"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Kafka",
15
+ "description": "New APIs for upgrading the Apache Kafka version of a cluster and to find out compatible upgrade paths"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "MarketplaceCatalog",
20
+ "description": "AWS Marketplace Catalog now supports accessing initial change payloads with DescribeChangeSet operation."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "STS",
5
+ "description": "API updates for STS"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Glue",
10
+ "description": "Starting today, you can stop the execution of Glue workflows that are running. AWS Glue workflows are directed acyclic graphs (DAGs) of Glue triggers, crawlers and jobs. Using a workflow, you can design a complex multi-job extract, transform, and load (ETL) activity that AWS Glue can execute and track as single entity. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CloudFormation",
15
+ "description": "This release adds support for the following features: 1. DescribeType and ListTypeVersions APIs now output a field IsDefaultVersion, indicating if a version is the default version for its type; 2. Add StackRollbackComplete waiter feature to wait until stack status is UPDATE_ROLLBACK_COMPLETE; 3. Add paginators in DescribeAccountLimits, ListChangeSets, ListStackInstances, ListStackSetOperationResults, ListStackSetOperations, ListStackSets APIs."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ECR",
20
+ "description": "This release adds support for specifying an image manifest media type when pushing a manifest to Amazon ECR."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.3 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Chime",
5
+ "description": "Amazon Chime now supports redacting chat messages."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECS",
10
+ "description": "This release adds support for specifying environment files to add environment variables to your containers."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Macie2",
15
+ "description": "Documentation updates for Amazon Macie"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "QLDB",
20
+ "description": "Amazon QLDB now supports Amazon Kinesis data streams. You can now emit QLDB journal data, via the new QLDB Streams feature, directly to Amazon Kinesis supporting event processing and analytics among related use cases."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "DynamoDB",
25
+ "description": "Documentation updates for dynamodb "
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "EC2",
30
+ "description": "This release changes the RunInstances CLI and SDK's so that if you do not specify a client token, a randomly generated token is used for the request to ensure idempotency."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.4 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Health",
5
+ "description": "Feature: Health: AWS Health added a new field to differentiate Public events from Account-Specific events in the API request and response. Visit https:\/\/docs.aws.amazon.com\/health\/latest\/APIReference\/API_Event.html to learn more."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Chime",
10
+ "description": "You can now receive Voice Connector call events through SNS or SQS."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "This release adds support for Federated Authentication via SAML-2.0 in AWS ClientVPN."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "TranscribeService",
20
+ "description": "Documentation updates for Amazon Transcribe."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.5 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3",
5
+ "description": "Fixes incorrect host for dualstack and accelerate endpoints in non-AWS partitions."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaLive",
10
+ "description": "AWS Elemental MediaLive now supports the ability to ingest the content that is streaming from an AWS Elemental Link device: https:\/\/aws.amazon.com\/medialive\/features\/link\/. This release also adds support for SMPTE-2038 and input state waiters."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SecurityHub",
15
+ "description": "For findings related to controls, the finding information now includes the reason behind the current status of the control. A new field for the findings original severity allows finding providers to use the severity values from the system they use to assign severity."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "AppMesh",
20
+ "description": "List APIs for all resources now contain additional information: when a resource was created, last updated, and its current version number."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Backup",
25
+ "description": "This release allows customers to enable or disable AWS Backup support for an AWS resource type. This release also includes new APIs, update-region-settings and describe-region-settings, which can be used to opt in to a specific resource type. For all current AWS Backup customers, the default settings enable support for EBS, EC2, StorageGateway, EFS, DDB and RDS resource types. "
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "CodeDeploy",
30
+ "description": "Amazon ECS customers using application and network load balancers can use CodeDeploy BlueGreen hook to invoke a CloudFormation stack update. With this update you can view CloudFormation deployment and target details via existing APIs and use your stack Id to list or delete all deployments associated with the stack."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Chime",
35
+ "description": "Amazon Chime enterprise account administrators can now set custom retention policies on chat data in the Amazon Chime application."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "TranscribeStreamingService",
40
+ "description": "This release adds support for vocabulary filtering in streaming with which you can filter unwanted words from the real-time transcription results. Visit https:\/\/docs.aws.amazon.com\/transcribe\/latest\/dg\/how-it-works.html to learn more."
41
+ },
42
+ {
43
+ "type": "enhancement",
44
+ "category": "ApplicationAutoScaling",
45
+ "description": "Documentation updates for Application Auto Scaling"
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.6 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "S3",
5
+ "description": "Deprecates unusable input members bound to Content-MD5 header. Updates example and documentation."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Synthetics",
10
+ "description": "AWS CloudWatch Synthetics now supports configuration of allocated memory for a canary."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CodeBuild",
15
+ "description": "CodeBuild adds support for tagging with report groups"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "From this release onwards ProvisionByoipCidr publicly supports IPv6. Updated ProvisionByoipCidr API to support tags for public IPv4 and IPv6 pools. Added NetworkBorderGroup to the DescribePublicIpv4Pools response."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.7 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "AutoScaling",
5
+ "description": "Documentation updates for Amazon EC2 Auto Scaling"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IoTSiteWise",
10
+ "description": "This release adds support for the standard deviation auto-computed aggregate and improved support for portal logo images in SiteWise."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.8 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElastiCache",
5
+ "description": "Amazon ElastiCache now allows you to use resource based policies to manage access to operations performed on ElastiCache resources. Also, Amazon ElastiCache now exposes ARN (Amazon Resource Names) for ElastiCache resources such as Cache Clusters and Parameter Groups. ARNs can be used to apply IAM policies to ElastiCache resources."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "QuickSight",
10
+ "description": "Add DataSetArns to QuickSight DescribeDashboard API response."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "The AWS Systems Manager GetOpsSummary API action now supports multiple OpsResultAttributes in the request. Currently, this feature only supports OpsResultAttributes with the following TypeNames: [AWS:EC2InstanceComputeOptimizer] or [AWS:EC2InstanceInformation, AWS:EC2InstanceComputeOptimizer]. These TypeNames can be used along with either or both of the following: [AWS:EC2InstanceRecommendation, AWS:RecommendationSource]"
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "Macie",
20
+ "description": "This is a documentation-only update to the Amazon Macie Classic API. This update corrects out-of-date references to the service name."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EC2",
25
+ "description": "ebsOptimizedInfo, efaSupported and supportedVirtualizationTypes added to DescribeInstanceTypes API"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "DLM",
30
+ "description": "Allowing cron expression in the DLM policy creation schedule. "
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.138.9 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "build\/packager",
5
+ "description": "Adds package symfony\/polyfill-intl-idn to .zip and .phar releases if the package exists in vendor directory."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "GuardDuty",
10
+ "description": "Documentation updates for GuardDuty"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticLoadBalancingv2",
15
+ "description": "This release added support for HTTP\/2 ALPN preference lists for Network Load Balancers"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.139.0 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "EndpointDiscovery",
5
+ "description": "Endpoint discovery behavior is modified to be enabled by default if any operation in a service requires it. Disabling endpoint discovery in configuration will disable it even for required operations."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EMR",
10
+ "description": "Amazon EMR now supports encrypting log files with AWS Key Management Service (KMS) customer managed keys."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "We are releasing HumanTaskUiArn as a new parameter in CreateLabelingJob and RenderUiTemplate which can take an ARN for a system managed UI to render a task. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "FSx",
20
+ "description": "New capabilities to update storage capacity and throughput capacity of your file systems, providing the flexibility to grow file storage and to scale up or down the available performance as needed to meet evolving storage needs over time."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Athena",
25
+ "description": "This release adds support for connecting Athena to your own Apache Hive Metastores in addition to the AWS Glue Data Catalog. For more information, please see https:\/\/docs.aws.amazon.com\/athena\/latest\/ug\/connect-to-data-source-hive.html"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "WorkLink",
30
+ "description": "Amazon WorkLink now supports resource tagging for fleets."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "KMS",
35
+ "description": "AWS Key Management Service (AWS KMS): If the GenerateDataKeyPair or GenerateDataKeyPairWithoutPlaintext APIs are called on a CMK in a custom key store (origin == AWS_CLOUDHSM), they return an UnsupportedOperationException. If a call to UpdateAlias causes a customer to exceed the Alias resource quota, the UpdateAlias API returns a LimitExceededException."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.139.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GuardDuty",
5
+ "description": "Amazon GuardDuty findings now include S3 bucket details under the resource section if an S3 Bucket was one of the affected resources"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.140.0 ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Build\\Docs",
5
+ "description": "Tweak docs redirect logic to use uid if possible."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "S3",
10
+ "description": "Modified Content-MD5 checksum logic to use modeled httpChecksumRequired trait instead of a hard-coded list of operations."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "MediaConvert",
15
+ "description": "AWS Elemental MediaConvert SDK has added support for the encoding of VP8 or VP9 video in WebM container with Vorbis or Opus audio."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElasticsearchService",
20
+ "description": "Amazon Elasticsearch Service now offers support for cross-cluster search, enabling you to perform searches, aggregations, and visualizations across multiple Amazon Elasticsearch Service domains with a single query or from a single Kibana interface. New feature includes the ability to setup connection, required to perform cross-cluster search, between domains using an approval workflow."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "DirectConnect",
25
+ "description": "This release supports the virtual interface failover test, which allows you to verify that traffic routes over redundant virtual interfaces when you bring your primary virtual interface out of service."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "IAM",
30
+ "description": "GenerateServiceLastAccessedDetails will now return ActionLastAccessed details for certain S3 control plane actions"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "ElastiCache",
35
+ "description": "This release improves the Multi-AZ feature in ElastiCache by adding a separate flag and proper validations."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Glue",
40
+ "description": "Adding databaseName in the response for GetUserDefinedFunctions() API."
41
+ }
42
+ ]
vendor/aws/aws-sdk-php/.changes/3.140.1 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "MediaPackageVod",
5
+ "description": "You can now restrict direct access to AWS Elemental MediaPackage by securing requests for VOD content using CDN authorization. With CDN authorization, content requests require a specific HTTP header and authorization code."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "New C5a instances, the latest generation of EC2's compute-optimized instances featuring AMD's 2nd Generation EPYC processors. C5a instances offer up to 96 vCPUs, 192 GiB of instance memory, 20 Gbps in Network bandwidth; New G4dn.metal bare metal instance with 8 NVIDIA T4 GPUs."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "MarketplaceMetering",
15
+ "description": "Documentation updates for meteringmarketplace"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Lightsail",
20
+ "description": "This release adds the BurstCapacityPercentage and BurstCapacityTime instance metrics, which allow you to track the burst capacity available to your instance."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SSM",
25
+ "description": "SSM State Manager support for executing an association only at specified CRON schedule after creating\/updating an association."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.140.2 ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "Amazon API Gateway now allows customers of REST APIs to skip trust chain validation for backend server certificates for HTTP and VPC Link Integration. This feature enables customers to configure their REST APIs to integrate with backends that are secured with certificates vended from private certificate authorities (CA) or certificates that are self-signed."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ServiceCatalog",
10
+ "description": "This release adds support for DescribeProduct and DescribeProductAsAdmin by product name, DescribeProvisioningArtifact by product name or provisioning artifact name, returning launch paths as part of DescribeProduct output and adds maximum length for provisioning artifact name and provisioning artifact description."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticBeanstalk",
15
+ "description": "These API changes enable an IAM user to associate an operations role with an Elastic Beanstalk environment, so that the IAM user can call Elastic Beanstalk actions without having access to underlying downstream AWS services that these actions call."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SageMakerRuntime",
20
+ "description": "You can now specify the production variant to send the inference request to, when invoking a SageMaker Endpoint that is running two or more variants."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "PersonalizeRuntime",
25
+ "description": "[Personalize] Adds ability to apply filter to real-time recommendations"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Personalize",
30
+ "description": "[Personalize] Adds ability to create and apply filters."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "CloudFront",
35
+ "description": "Amazon CloudFront adds support for configurable origin connection attempts and origin connection timeout."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Pinpoint",
40
+ "description": "This release enables additional functionality for the Amazon Pinpoint journeys feature. With this release, you can send messages through additional channels, including SMS, push notifications, and custom channels."
41
+ }
42
+ ]
vendor/aws/aws-sdk-php/.changes/3.140.3 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServiceDiscovery",
5
+ "description": "Added support for tagging Service and Namespace type resources in Cloud Map"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Shield",
10
+ "description": "This release adds the option for customers to identify a contact name and method that the DDoS Response Team can proactively engage when a Route 53 Health Check that is associated with a Shield protected resource fails."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.22.10 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Ec2",
5
+ "description": "New EC2 I3 instance type"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.22.11 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElasticsearchService",
5
+ "description": "Added three new API calls to existing Amazon Elasticsearch service to expose Amazon Elasticsearch imposed limits to customers."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.22.9 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElasticBeanstalk",
5
+ "description": "Elastic Beanstalk adds support for creating and managing custom platform."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudDirectory",
10
+ "description": "ListObjectAttributes documentation updated based on forum feedback"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Route53",
15
+ "description": "Added support for operations CreateVPCAssociationAuthorization and DeleteVPCAssociationAuthorization to throw a ConcurrentModification error when a conflicting modification occurs in parallel to the authorizations in place for a given hosted zone."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "GameLift",
20
+ "description": "Allow developers to configure global queues for creating GameSessions. Allow PlayerData on PlayerSessions to store player-specific data."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.23.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Organizations",
5
+ "description": "AWS Organizations is a web service that enables you to consolidate your multiple AWS accounts into an organization and centrally manage your accounts and their resources."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DynamoDB",
10
+ "description": "Time to Live (TTL) is a feature that allows you to define when items in a table expire and can be purged from the database, so that you don't have to track expired data and delete it manually. With TTL enabled on a DynamoDB table, you can set a timestamp for deletion on a per-item basis, allowing you to limit storage usage to only those records that are relevant."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "IAM",
15
+ "description": "Added support for AWS Organizations service control policies (SCPs) to SimulatePrincipalPolicy operation. If there are SCPs associated with the simulated user's account, their effect on the result is captured in the OrganizationDecisionDetail element in the EvaluationResult."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "MechanicalTurkRequesterService",
20
+ "description": "Amazon Mechanical Turk is a web service that provides an on-demand, scalable, human workforce to complete jobs that humans can do better than computers, for example, recognizing objects in photos."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "DynamoDBStreams",
25
+ "description": "Added support for TTL on a DynamoDB tables"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.23.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "OpsWorksCM",
5
+ "description": "OpsWorks for Chef Automate has added a new field \"AssociatePublicIpAddress\" to the CreateServer request, \"CloudFormationStackArn\" to the Server model and \"TERMINATED\" server state."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Budgets",
10
+ "description": "When creating or editing a budget via the AWS Budgets API you can define notifications that are sent to subscribers when the actual or forecasted value for cost or usage exceeds the notificationThreshold associated with the budget notification object. Starting today, the maximum allowed value for the notificationThreshold was raised from 100 to 300. This change was made to give you more flexibility when setting budget notifications."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.23.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "Add support to using encrypted clusters as cross-region replication masters. Update CopyDBClusterSnapshot API to support encrypted cross region copy of Aurora cluster snapshots."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.0 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "WorkDocs",
5
+ "description": "The Administrative SDKs for Amazon WorkDocs provides full administrator level access to WorkDocs site resources, allowing developers to integrate their applications to manage WorkDocs users, content and permissions programmatically"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "API Gateway has added support for ACM certificates on custom domain names. Both Amazon-issued certificates and uploaded third-part certificates are supported."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudDirectory",
10
+ "description": "Introduces a new Cloud Directory API that enables you to retrieve all available parent paths for any type of object (a node, leaf node, policy node, and index node) in a hierarchy."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EMR",
5
+ "description": "This release includes support for instance fleets in Amazon EMR."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeDeploy",
10
+ "description": "Add paginators for Codedeploy"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.3 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudWatchEvents",
5
+ "description": "This update extends Target Data Type for configuring Target behavior during invocation."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DeviceFarm",
10
+ "description": "Network shaping allows users to simulate network connections and conditions while testing their Android, iOS, and web apps with AWS Device Farm."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.4 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "events",
5
+ "description": "Update documentation"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.5 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "MarketplaceCommerceAnalytics",
5
+ "description": "This update adds a new data set, us_sales_and_use_tax_records, which enables AWS Marketplace sellers to programmatically access to their U.S. Sales and Use Tax report data."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Pinpoint",
10
+ "description": "Added support for segment endpoints by user attributes in addition to endpoint attributes, publishing raw app analytics and campaign events as events streams to Kinesis and Kinesis Firehose"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "DirectConnect",
15
+ "description": "Deprecated DescribeConnectionLoa, DescribeInterconnectLoa, AllocateConnectionOnInterconnect and DescribeConnectionsOnInterconnect operations in favor of DescribeLoa, DescribeLoa, AllocateHostedConnection and DescribeHostedConnections respectively."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.6 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lambda",
5
+ "description": "Adds support for new runtime Node.js v6.10 for AWS Lambda service"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticLoadBalancingv2",
10
+ "description": "Adding waiters for Elastic Load Balancing V2"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ApplicationDiscoveryService",
15
+ "description": "Adds export configuration options to the AWS Discovery Service API."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.7 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ApplicationAutoScaling",
5
+ "description": "Application AutoScaling is launching support for a new target resource (AppStream 2.0 Fleets) as a scalable target."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.8 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "Updated validation rules for SendCommand and RegisterTaskWithMaintenanceWindow APIs"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.24.9 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Batch",
5
+ "description": "Customers can now provide a retryStrategy as part of the RegisterJobDefinition and SubmitJob API calls. The retryStrategy object has a number value for attempts. This is the number of non successful executions before a job is considered FAILED. In addition, the JobDetail object now has an attempts field and shows all execution attempts."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Customers can now tag their Amazon EC2 Instances and Amazon EBS Volumes at the time of their creation. You can do this from the EC2 Instance launch wizard or through the RunInstances or CreateVolume APIs. By tagging resources at the time of creation, you can eliminate the need to run custom tagging scripts after resource creation. In addition, you can now set resource-level permissions on the CreateVolume, CreateTags, DeleteTags, and the RunInstances APIs. This allows you to implement stronger security policies by giving you more granular control over which users and groups have access to these APIs. You can also enforce the use of tagging and control what tag keys and values are set on your resources. When you combine tag usage and resource-level IAM policies together, you can ensure your instances and volumes are properly secured upon creation and achieve more accurate cost allocation reporting. These new features are provided at no additional cost. "
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "StorageGateway",
5
+ "description": "File gateway mode in AWS Storage gateway provides access to objects in S3 as files on a Network File System (NFS) mount point. Once a file share is created, any changes made externally to the S3 bucket will not be reflected by the gateway. Using the cache refresh feature in this update, the customer can trigger an on-demand scan of the keys in their S3 bucket and refresh the file namespace cached on the gateway. It takes as an input the fileShare ARN and refreshes the cache for only that file share. Additionally there is new functionality on file gateway that allows you configure what squash options they would like on their file share, this allows a customer to configure their gateway to not squash root permissions. This can be done by setting options in NfsOptions for CreateNfsFileShare and UpdateNfsFileShare APIs."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "ResourceGroupsTaggingAPI",
10
+ "description": "Resource Groups Tagging APIs can help you organize your resources and enable you to simplify resource management, access management, and cost allocation."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CloudFormation",
15
+ "description": "Adding paginators for ListExports and ListImports"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudFront",
20
+ "description": "Amazon CloudFront now supports user configurable HTTP Read and Keep-Alive Idle Timeouts for your Custom Origin Servers"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudDirectory",
5
+ "description": "ListObjectAttributes now supports filtering by facet."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "LexRuntimeService",
5
+ "description": "Adds support to PostContent for speech input"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudWatch",
5
+ "description": "Amazon Web Services announced the immediate availability of two additional alarm configuration rules for Amazon CloudWatch Alarms. The first rule is for configuring missing data treatment. Customers have the options to treat missing data as alarm threshold breached, alarm threshold not breached, maintain alarm state and the current default treatment. The second rule is for alarms based on percentiles metrics that can trigger unnecassarily if the percentile is calculated from a small number of samples. The new rule can treat percentiles with low sample counts as same as missing data. If the first rule is enabled, the same treatment will be applied when an alarm encounters a percentile with low sample counts."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.4 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElastiCache",
5
+ "description": "ElastiCache added support for testing the Elasticache Multi-AZ feature with Automatic Failover."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.5 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ElasticLoadBalancingv2",
5
+ "description": "Adds supports a new condition for host-header conditions to CreateRule and ModifyRule"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.6 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Redshift",
5
+ "description": "This update adds the GetClusterCredentials API which is used to get temporary login credentials to the cluster. AccountWithRestoreAccess now has a new member AccountAlias, this is the identifier of the AWS support account authorized to restore the specified snapshot. This is added to support the feature where the customer can share their snapshot with the Amazon Redshift Support Account without having to manually specify the AWS Redshift Service account ID on the AWS Console\/API."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.7 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "API Gateway request validators"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "GameLift",
10
+ "description": "Allows developers to utilize an improved workflow when calling our Queues API and introduces a new feature that allows developers to specify a maximum allowable latency per Queue."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Batch",
15
+ "description": "API Update for AWS Batch: Customer provided AMI for MANAGED Compute Environment "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "OpsWorks",
20
+ "description": "Cloudwatch Logs agent configuration can now be attached to OpsWorks Layers using CreateLayer and UpdateLayer. OpsWorks will then automatically install and manage the CloudWatch Logs agent on the instances part of the OpsWorks Layer."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.25.8 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lambda",
5
+ "description": "You can use tags to group and filter your Lambda functions, making it easier to analyze them for billing allocation purposes. For more information, see Tagging Lambda Functions. You can now write or upgrade your Lambda functions using Python version 3.6. For more information, see Programming Model for Authoring Lambda Functions in Python. Note: Features will be rolled out in the US regions on 4\/19."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.26.0 ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IAM",
5
+ "description": "This changes introduces a new IAM role type, Service Linked Role, which works like a normal role but must be managed via services' control. "
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "LexModelBuildingService",
10
+ "description": "Amazon Lex is a service for building conversational interfaces into any application using voice and text."
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "CodeStar",
15
+ "description": "AWS CodeStar is a cloud-based service for creating, managing, and working with software development projects on AWS. An AWS CodeStar project creates and integrates AWS services for your project development toolchain. AWS CodeStar also manages the permissions required for project users."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "Adds support for creating an Amazon FPGA Image (AFI) from a specified design checkpoint (DCP)."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Rekognition",
25
+ "description": "Given an image, the API detects explicit or suggestive adult content in the image and returns a list of corresponding labels with confidence scores, as well as a taxonomy (parent-child relation) for each label."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Lambda",
30
+ "description": "Lambda integration with CloudDebugger service to enable customers to enable tracing for the Lambda functions and send trace information to the CloudDebugger service."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "APIGateway",
35
+ "description": "Add support for \"embed\" property."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "Polly",
40
+ "description": "API Update for Amazon Polly: Add support for speech marks"
41
+ }
42
+ ]
vendor/aws/aws-sdk-php/.changes/3.26.1 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Route53",
5
+ "description": "Release notes: SDK documentation now includes examples for ChangeResourceRecordSets for all types of resource record set, such as weighted, alias, and failover."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "KMS",
10
+ "description": "Doc-only update for Key Management Service (KMS): Update docs for GrantConstraints and GenerateRandom"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticLoadBalancingv2",
15
+ "description": "Adding LoadBalancersDeleted waiter for Elasticloadbalancingv2"
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "Route53Domains",
20
+ "description": "Adding examples and other documentation updates."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "DirectConnect",
25
+ "description": "Documentation updates for AWS Direct Connect."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "DeviceFarm",
30
+ "description": "API Update for AWS Device Farm: Support for Deals and Promotions "
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.26.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Kinesis",
5
+ "description": "Adds a new waiter, StreamNotExists, to Kinesis "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppStream",
10
+ "description": "The new feature named \"Default Internet Access\" will enable Internet access from AppStream 2.0 instances - image builders and fleet instances. Admins will check a flag either through AWS management console for AppStream 2.0 or through API while creating an image builder or while creating\/updating a fleet."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.26.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "With Amazon Relational Database Service (Amazon RDS) running MySQL or Amazon Aurora, you can now authenticate to your DB instance using IAM database authentication."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.26.4 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Rekognition",
5
+ "description": "Fix for missing file type check"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudFormation",
10
+ "description": "API update for CloudFormation: New optional parameter ClientRequestToken which can be used as an idempotency token to safely retry certain operations as well as tagging StackEvents."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Snowball",
15
+ "description": "The Snowball API has a new exception that can be thrown for list operation requests."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SQS",
20
+ "description": "Adding server-side encryption (SSE) support to SQS by integrating with AWS KMS; adding new queue attributes to SQS CreateQueue, SetQueueAttributes and GetQueueAttributes APIs to support SSE."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "RDS",
25
+ "description": "The DescribeDBClusterSnapshots API now returns a SourceDBClusterSnapshotArn field which identifies the source DB cluster snapshot of a copied snapshot."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.26.5 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudFormation",
5
+ "description": "Adding back the removed waiters and paginators."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.27.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "S3",
5
+ "description": "Fixed possible security issue in `Transfer`s download `transfer` operation where files could be downloaded to a directory outside the destination directory if the key contained relative paths. Ignoring files to continue with your transfer can be done through passing an iterator of files to download to `Transfer`s parameter: `$source`. These can be generated on `s3:\/\/` paths if you have registered the SDK's `StreamWrapper` via `\\Aws\\recursive_dir_iterator`."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Lambda",
10
+ "description": "Support for UpdateFunctionCode DryRun option"
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "MarketplaceEntitlementService",
15
+ "description": "AWS Marketplace Entitlement Service enables AWS Marketplace sellers to determine the capacity purchased by their customers."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ECS",
20
+ "description": "Exposes container instance registration time in ECS:DescribeContainerInstances."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.27.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CodeStar",
5
+ "description": "Updated documentation for AWS CodeStar."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "WorkSpaces",
10
+ "description": "Doc-only Update for WorkSpaces"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.27.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Organizations",
5
+ "description": "AWS Organizations APIs that return an Account object now include the email address associated with the account\u2019s root user."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticLoadBalancing",
10
+ "description": "Add a new API to allow customers to describe their account limits, such as load balancer limit, target group limit etc."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticLoadBalancingv2",
15
+ "description": "Add a new API to allow customers to describe their account limits, such as load balancer limit, target group limit etc."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "LexModelBuildingService",
20
+ "description": "Releasing new DeleteBotVersion, DeleteIntentVersion and DeleteSlotTypeVersion APIs."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.27.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "UpdateAssociation API now supports updating document name and targets of an association. GetAutomationExecution API can return FailureDetails as an optional field to the StepExecution Object, which contains failure type, failure stage as well as other failure related information for a failed step."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.27.4 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GameLift",
5
+ "description": "Allow developers to specify how metrics are grouped in CloudWatch for their GameLift fleets. Developers can also specify how many concurrent game sessions activate on a per-instance basis."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeDeploy",
10
+ "description": "This release introduces the previousRevision field in the responses to the GetDeployment and BatchGetDeployments actions. previousRevision provides information about the application revision that was deployed to the deployment group before the most recent successful deployment. Also, the fileExistsBehavior parameter has been added for CreateDeployment action requests. In the past, if the AWS CodeDeploy agent detected files in a target location that weren't part of the application revision from the most recent successful deployment, it would fail the current deployment by default. This new parameter provides options for how the agent handles these files: fail the deployment, retain the content, or overwrite the content."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Inspector",
15
+ "description": "Adds ability to produce an assessment report that includes detailed and comprehensive results of a specified assessment run."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "KMS",
20
+ "description": "Update documentation for KMS."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.27.5 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CloudWatchLogs",
5
+ "description": "Various CloudWatch Logs documentation updates."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CloudWatchEvents",
10
+ "description": "Various CloudWatch Events documentation updates."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Polly",
15
+ "description": "Amazon Polly adds new German voice \"Vicki\""
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "AutoScaling",
20
+ "description": "Various Auto Scaling documentation updates"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.0 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lightsail",
5
+ "description": "This release adds new APIs that make it easier to set network port configurations on Lightsail instances. Developers can now make a single request to both open and close public ports on an instance using the PutInstancePublicPorts operation."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "Athena",
10
+ "description": "This release adds support for Amazon Athena. Amazon Athena is an interactive query service that makes it easy to analyze data in Amazon S3 using standard SQL. Athena is serverless, so there is no infrastructure to manage, and you pay only for the queries that you run."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SQS",
5
+ "description": "MD5 Validation of `MessageAttributes` is now being performed on `ReceiveMessage` calls. SQS uses a custom encoding for generating the hash input, [details on that scheme are available here.](http:\/\/docs.aws.amazon.com\/AWSSimpleQueueService\/latest\/SQSDeveloperGuide\/sqs-message-attributes.html#sqs-attrib-md5)"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ResourceGroupsTaggingAPI",
10
+ "description": "You can now specify the number of resources returned per page in GetResources operation, as an optional parameter, to easily manage the list of resources returned by your queries."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.10 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IoT",
5
+ "description": "Update client side validation for SalesForce action."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CloudFront",
10
+ "description": "Doc update to fix incorrect prefix in S3OriginConfig"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ACM",
15
+ "description": "Documentation update for AWS Certificate Manager."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DatabaseMigrationService",
5
+ "description": "This release adds support for using Amazon S3 and Amazon DynamoDB as targets for database migration, and using MongoDB as a source for database migration. For more information, see the AWS Database Migration Service documentation."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "StorageGateway",
5
+ "description": "Two Storage Gateway data types, Tape and TapeArchive, each have a new response element, TapeUsedInBytes. This element helps you manage your virtual tapes. By using TapeUsedInBytes, you can see the amount of data written to each virtual tape."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IAM",
10
+ "description": "The unique ID and access key lengths were extended from 32 to 128"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "STS",
15
+ "description": "The unique ID and access key lengths were extended from 32 to 128."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.4 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppStream",
5
+ "description": "Support added for persistent user storage, backed by S3."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Rekognition",
10
+ "description": "Updated the CompareFaces API response to include orientation information, unmatched faces, landmarks, pose, and quality of the compared faces."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.5 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "S3",
5
+ "description": "S3 calls are now done with a host style URL by default. Options for path style on the client and command levels are available as `use_path_style_endpoint` and `@use_path_style_endpoint`, respectively. [More details on the differences between the styles can be found here.](http:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/dev\/UsingBucket.html#access-bucket-intro)"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "S3",
10
+ "description": "New example snippets for Amazon S3."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CloudDirectory",
15
+ "description": "Cloud Directory has launched support for Typed Links, enabling customers to create object-to-object relationships that are not hierarchical in nature. Typed Links enable customers to quickly query for data along these relationships. Customers can also enforce referential integrity using Typed Links, ensuring data in use is not inadvertently deleted."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.6 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "Amazon RDS customers can now easily and quickly stop and start their DB instances."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.7 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "LexModelBuildingService",
5
+ "description": "Updated documentation and added examples for Amazon Lex Runtime Service."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeDeploy",
10
+ "description": "AWS CodeDeploy has improved how it manages connections to GitHub accounts and repositories. You can now create and store up to 25 connections to GitHub accounts in order to associate AWS CodeDeploy applications with GitHub repositories. Each connection can support multiple repositories. You can create connections to up to 25 different GitHub accounts, or create more than one connection to a single account. The ListGitHubAccountTokenNames command has been introduced to retrieve the names of stored connections to GitHub accounts that you have created. The name of the connection to GitHub used for an AWS CodeDeploy application is also included in the ApplicationInfo structure. Two new fields, lastAttemptedDeployment and lastSuccessfulDeployment, have been added to DeploymentGroupInfo to improve the handling of deployment group information in the AWS CodeDeploy console. Information about these latest deployments can also be retrieved using the GetDeploymentGroup and BatchGetDeployment group requests. Also includes a region update (us-gov-west-1)."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticLoadBalancingv2",
15
+ "description": "Update the existing DescribeRules API to support pagination."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CognitoIdentityProvider",
20
+ "description": "Added support within Amazon Cognito User Pools for 1) a customizable hosted UI for user sign up and sign in and 2) integration of external identity providers."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.8 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "WorkDocs",
5
+ "description": "This release includes new APIs to manage tags and custom metadata on resources and also new APIs to add and retrieve comments at the document level."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "KinesisAnalytics",
10
+ "description": "Kinesis Analytics publishes error messages CloudWatch logs in case of application misconfigurations"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.28.9 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppStream",
5
+ "description": "AppStream 2.0 Custom Security Groups allows you to easily control what network resources your streaming instances and images have access to. You can assign up to 5 security groups per Fleet to control the inbound and outbound network access to your streaming instances to specific IP ranges, network protocols, or ports."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AutoScaling",
10
+ "description": "Autoscaling resource model update."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "IoT",
15
+ "description": " Added Salesforce action to IoT Rules Engine."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.0 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Greengrass",
5
+ "description": "AWS Greengrass is software that lets you run local compute, messaging, and device state synchronization for connected devices in a secure way. With AWS Greengrass, connected devices can run AWS Lambda functions, keep device data in sync, and communicate with other devices securely even when not connected to the Internet. Using AWS Lambda, Greengrass ensures your IoT devices can respond quickly to local events, operate with intermittent connections, and minimize the cost of transmitting IoT data to the cloud."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeBuild",
10
+ "description": "Add support to APIs for privileged containers. This change would allow performing privileged operations like starting the Docker daemon inside builds possible in custom docker images."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.1 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Rekognition",
5
+ "description": "API Update for AmazonRekognition: Adding RecognizeCelebrities API"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IoT",
10
+ "description": "In addition to using certificate ID, AWS IoT customers can now obtain the description of a certificate with the certificate PEM."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Pinpoint",
15
+ "description": "Starting today Amazon Pinpoint adds SMS Text and Email Messaging support in addition to Mobile Push Notifications, providing developers, product managers and marketers with multi-channel messaging capabilities to drive user engagement in their applications. Pinpoint also enables backend services and applications to message users directly and provides advanced user and app analytics to understand user behavior and messaging performance."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "OpsWorks",
5
+ "description": "Tagging Support for AWS OpsWorks Stacks"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "API Update for RDS: this update enables copy-on-write, a new Aurora MySQL Compatible Edition feature that allows users to restore their database, and support copy of TDE enabled snapshot cross region."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.4 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "With this release AWS Config supports the Amazon CloudWatch alarm resource type."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.5 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CloudDirectory",
5
+ "description": "Documentation update for Cloud Directory"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ApplicationAutoScaling",
10
+ "description": "Application Auto Scaling now supports automatic scaling of read and write throughput capacity for DynamoDB tables and global secondary indexes."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.6 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServiceCatalog",
5
+ "description": "Added ProvisioningArtifactSummaries to DescribeProductAsAdmin's output to show the provisioning artifacts belong to the product. Allow filtering by SourceProductId in SearchProductsAsAdmin for AWS Marketplace products. Added a verbose option to DescribeProvisioningArtifact to display the CloudFormation template used to create the provisioning artifact.Added DescribeProvisionedProduct API. Changed the type of ProvisionedProduct's Status to be distinct from Record's Status. New ProvisionedProduct's Status are AVAILABLE, UNDER_CHANGE, TAINTED, ERROR. Changed Record's Status set of values to CREATED, IN_PROGRESS, IN_PROGRESS_IN_ERROR, SUCCEEDED, FAILED."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Adds API to describe Amazon FPGA Images (AFIs) available to customers, which includes public AFIs, private AFIs that you own, and AFIs owned by other AWS accounts for which you have load permissions."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ECS",
15
+ "description": "Added support for cpu, memory, and memory reservation container overrides on the RunTask and StartTask APIs."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "IoT",
20
+ "description": "Revert the last release: remove CertificatePem from DescribeCertificate API."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.7 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "XRay",
5
+ "description": "Add a response time histogram to the services in response of GetServiceGraph API."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Batch",
10
+ "description": "AWS Batch is now available in the ap-northeast-1 region."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.8 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Organizations",
5
+ "description": "Improvements to Exception Modeling"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.29.9 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "WorkDocs",
5
+ "description": "This release provides a new API to retrieve the activities performed by WorkDocs users."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.30.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Route53",
5
+ "description": "Amazon Route 53 now supports multivalue answers in response to DNS queries, which lets you route traffic approximately randomly to multiple resources, such as web servers. Create one multivalue answer record for each resource and, optionally, associate an Amazon Route 53 health check with each record, and Amazon Route 53 responds to DNS queries with up to eight healthy records."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "DAX",
10
+ "description": "Amazon DynamoDB Accelerator (DAX) is a fully managed, highly available, in-memory cache for DynamoDB that delivers up to a 10x performance improvement - from milliseconds to microseconds - even at millions of requests per second. DAX does all the heavy lifting required to add in-memory acceleration to your DynamoDB tables, without requiring developers to manage cache invalidation, data population, or cluster management."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "Adding hierarchy support to the SSM Parameter Store API. Added support tor tagging. New APIs: GetParameter - retrieves one parameter, DeleteParameters - deletes multiple parameters (max number 10), GetParametersByPath - retrieves parameters located in the hierarchy. Updated APIs: PutParameter - added ability to enforce parameter value by applying regex (AllowedPattern), DescribeParameters - modified to support Tag filtering."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "WAF",
20
+ "description": "You can now create, edit, update, and delete a new type of WAF rule with a rate tracking component."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.30.1 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodePipeline",
5
+ "description": "A new API, ListPipelineExecutions, enables you to retrieve summary information about the most recent executions in a pipeline, including pipeline execution ID, status, start time, and last updated time. You can request information for a maximum of 100 executions. Pipeline execution data is available for the most recent 12 months of activity."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Lambda",
10
+ "description": "Lambda is now available in the Canada (Central) region."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticLoadBalancing",
15
+ "description": "Add retry error state to InstanceInService waiter for ElasticLoadBalancer"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Route53",
20
+ "description": "This release reintroduces the HealthCheckInUse exception."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "DatabaseMigrationService",
25
+ "description": "Added tagging for DMS certificates."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Lightsail",
30
+ "description": "This release adds a new nextPageToken property to the result of the GetOperationsForResource API. Developers can now get the next set of items in a list by making subsequent calls to GetOperationsForResource API with the token from the previous call. This release also deprecates the nextPageCount property, which previously returned null (use the nextPageToken property instead). This release also deprecates the customImageName property on the CreateInstancesRequest class, which was previously ignored by the API."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.30.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lambda",
5
+ "description": "The Lambda Invoke API will now throw new exception InvalidRuntimeException (status code 502) for invokes with deprecated runtimes."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.30.3 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServiceCatalog",
5
+ "description": "Proper tagging of resources is critical to post-launch operations such as billing, cost allocation, and resource management. By using Service Catalog's TagOption Library, administrators can define a library of re-usable TagOptions that conform to company standards, and associate these with Service Catalog portfolios and products. Learn how to move your current tags to the new library, create new TagOptions, and view and associate your library items with portfolios and products. Understand how to ensure that the right tags are created on products launched through Service Catalog and how to provide users with defined selectable tags."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Greengrass",
10
+ "description": "AWS Greengrass is now available in new regions."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.30.4 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "Adding Resource Data Sync support to SSM Inventory. New APIs: * CreateResourceDataSync - creates a new resource data sync configuration, * ListResourceDataSync - lists existing resource data sync configurations, * DeleteResourceDataSync - deletes an existing resource data sync configuration. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudWatchEvents",
10
+ "description": "CloudWatch Events now allows different AWS accounts to share events with each other through a new resource called event bus. Event buses accept events from AWS services, other AWS accounts and PutEvents API calls. Currently all AWS accounts have one default event bus. To send events to another account, customers simply write rules to match the events of interest and attach an event bus in the receiving account as the target to the rule. The PutTargets API has been updated to allow adding cross account event buses as targets. In addition, we have released two new APIs - PutPermission and RemovePermission - that enables customers to add\/remove permissions to their default event bus."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GameLift",
15
+ "description": "Allow developers to download GameLift fleet creation logs to assist with debugging."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "S3",
5
+ "description": "A new `params` option is available in the `MultipartUploader` and `MultipartCopy` classes for parameters that should be applied to all sub-commands of their upload functionality. This also improves functionality around passing `params` directly to `ObjectUploader` and `ObjectCopier`. A new `before_lookup` callback has been added to `ObjectCopier` for operating on the `HeadObject` command directly; `params` will be passed to HeadObject as well. Since these are changes to existing options, they may alter current functionality."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "MarketplaceCommerceAnalytics",
10
+ "description": "Documentation updates for AWS Marketplace Commerce Analytics."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "S3",
15
+ "description": "API Update for S3: Adding Object Tagging Header to MultipartUpload Initialization"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudWatch",
5
+ "description": "We are excited to announce the availability of APIs and CloudFormation support for CloudWatch Dashboards. You can use the new dashboard APIs or CloudFormation templates to dynamically build and maintain dashboards to monitor your infrastructure and applications. There are four new dashboard APIs - PutDashboard, GetDashboard, DeleteDashboards, and ListDashboards APIs. PutDashboard is used to create a new dashboard or modify an existing one whereas GetDashboard is the API to get the details of a specific dashboard. ListDashboards and DeleteDashboards are used to get the names or delete multiple dashboards respectively. Getting started with dashboard APIs is similar to any other AWS APIs. The APIs can be accessed through AWS SDK or through CLI tools."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Route53",
10
+ "description": "Bug fix for InvalidChangeBatch exception."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.10 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudDirectory",
5
+ "description": "Cloud Directory adds support for additional batch operations."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudFormation",
10
+ "description": "AWS CloudFormation StackSets enables you to manage stacks across multiple accounts and regions."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.2 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "KMS",
5
+ "description": "This release of AWS Key Management Service introduces the ability to determine whether a key is AWS managed or customer managed."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DirectoryService",
10
+ "description": "You can now improve the resilience and performance of your Microsoft AD directory by deploying additional domain controllers. Added UpdateNumberofDomainControllers API that allows you to update the number of domain controllers you want for your directory, and DescribeDomainControllers API that allows you to describe the detailed information of each domain controller of your directory. Also added the 'DesiredNumberOfDomainControllers' field to the DescribeDirectories API output for Microsoft AD."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Kinesis",
15
+ "description": "You can now encrypt your data at rest within an Amazon Kinesis Stream using server-side encryption. Server-side encryption via AWS KMS makes it easy for customers to meet strict data management requirements by encrypting their data at rest within the Amazon Kinesis Streams, a fully managed real-time data processing service."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SSM",
20
+ "description": "Amazon EC2 Systems Manager now expands Patching support to Amazon Linux, Red Hat and Ubuntu in addition to the already supported Windows Server."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "Ecs",
25
+ "description": "ECS\/ECR now available in BJS"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3",
5
+ "description": "Fixes an issue introduced in 3.31.0 that was not setting the ContentLength for all MultipartUploader::createPart streams, therefore potentially using an incorrect, $options['params'] value."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AutoScaling",
10
+ "description": "Auto Scaling now supports a new type of scaling policy called target tracking scaling policies that you can use to set up dynamic scaling for your application."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "SWF",
15
+ "description": "Added support for attaching control data to Lambda tasks. Control data lets you attach arbitrary strings to your decisions and history events."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.4 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "LexModelBuildingService",
5
+ "description": "Fixed broken links to reference and conceptual content."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "APIGateway",
10
+ "description": "Adds support for management of gateway responses."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "X-ENI (or Cross-Account ENI) is a new feature that allows the attachment or association of Elastic Network Interfaces (ENI) between VPCs in different AWS accounts located in the same availability zone. With this new capability, service providers and partners can deliver managed solutions in a variety of new architectural patterns where the provider and consumer of the service are in different AWS accounts."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.5 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "MarketplaceCommerceAnalytics",
5
+ "description": "Update to Documentation Model For New Report Cadence \/ Reformat of Docs"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "New EC2 GPU Graphics instance"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ApplicationDiscoveryService",
15
+ "description": "Adding feature to the Export API for Discovery Service to allow filters for the export task to allow export based on per agent id."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.6 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lambda",
5
+ "description": "Lambda@Edge lets you run code closer to your end users without provisioning or managing servers. With Lambda@Edge, your code runs in AWS edge locations, allowing you to respond to your end users at the lowest latency. Your code is triggered by Amazon CloudFront events, such as requests to and from origin servers and viewers, and it is ready to execute at every AWS edge location whenever a request for content is received. You just upload your Node.js code to AWS Lambda and Lambda takes care of everything required to run and scale your code with high availability. You only pay for the compute time you consume - there is no charge when your code is not running."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CognitoIdentityProvider",
10
+ "description": "Allows developers to configure user pools for email\/phone based signup and sign-in."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.7 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3",
5
+ "description": "Properly handle reading mismatched regions from S3's AuthorizationHeaderMalformed exception for S3MultiRegionClient."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Budgets",
10
+ "description": "Update budget Management API's to list\/create\/update RI_UTILIZATION type budget. Update budget Management API's to support DAILY timeUnit for RI_UTILIZATION type budget."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.8 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EMR",
5
+ "description": "Amazon EMR now includes the ability to use a custom Amazon Linux AMI and adjustable root volume size when launching a cluster."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.31.9 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppStream",
5
+ "description": "Amazon AppStream 2.0 image builders and fleets can now access applications and network resources that rely on Microsoft Active Directory (AD) for authentication and permissions. This new feature allows you to join your streaming instances to your AD, so you can use your existing AD user management tools. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Spot Fleet tagging capability allows customers to automatically tag instances launched by Spot Fleet. You can use this feature to label or distinguish instances created by distinct Spot Fleets. Tagging your EC2 instances also enables you to see instance cost allocation by tag in your AWS bill."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Support for changes regarding PHP 7.2 releases."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "DynamoDB",
10
+ "description": "Corrected a typo."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CloudWatch",
15
+ "description": "This release adds high resolution features to CloudWatch, with support for Custom Metrics down to 1 second and Alarms down to 10 seconds."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "Amazon EC2 Elastic GPUs allow you to easily attach low-cost graphics acceleration to current generation EC2 instances. With Amazon EC2 Elastic GPUs, you can configure the right amount of graphics acceleration to your particular workload without being constrained by fixed hardware configurations and limited GPU selection."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "KinesisAnalytics",
5
+ "description": "Added additional exception types and clarified documentation."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "The CreateDefaultVPC API enables you to create a new default VPC . You no longer need to contact AWS support, if your default VPC has been deleted."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CodeStar",
5
+ "description": " AWS CodeStar is now available in the following regions: Asia Pacific (Singapore), Asia Pacific (Sydney), EU (Frankfurt)"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "Adds a SendAutomationSignal API to SSM Service. This API is used to send a signal to an automation execution to change the current behavior or status of the execution."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Inspector",
15
+ "description": "Inspector's StopAssessmentRun API has been updated with a new input option - stopAction. This request parameter can be set to either START_EVALUATION or SKIP_EVALUATION. START_EVALUATION (the default value, and the previous behavior) stops the AWS agent data collection and begins the results evaluation for findings generation based on the data collected so far. SKIP_EVALUATION cancels the assessment run immediately, after which no findings are generated."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.3 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeDeploy",
5
+ "description": "AWS CodeDeploy now supports the use of multiple tag groups in a single deployment group (an intersection of tags) to identify the instances for a deployment. When you create or update a deployment group, use the new ec2TagSet and onPremisesTagSet structures to specify up to three groups of tags. Only instances that are identified by at least one tag in each of the tag groups are included in the deployment group."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SES",
10
+ "description": "This update adds information about publishing email open and click events. This update also adds information about publishing email events to Amazon Simple Notification Service (Amazon SNS)."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ConfigService",
15
+ "description": "Added new API, GetDiscoveredResourceCounts, which returns the resource types, the number of each resource type, and the total number of resources that AWS Config is recording in the given region for your AWS account."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Pinpoint",
20
+ "description": "This release of the Pinpoint SDK enables App management - create, delete, update operations, Raw Content delivery for APNs and GCM campaign messages and From Address override."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ElasticLoadBalancingv2",
25
+ "description": "Add TargetInService and TargetDeregistered waiters "
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "EC2",
30
+ "description": "Ec2 SpotInstanceRequestFulfilled waiter update"
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.4 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Signature",
5
+ "description": "Fixed edgecase in expiration duration check on signature when seconds roll between implicit startime and relative end time."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticBeanstalk",
10
+ "description": "Add support for paginating the result of DescribeEnvironments. Include the ARN of described environments in DescribeEnvironments output."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.5 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "RDS",
5
+ "description": "Documentation updates for RDS."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.6 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudDirectory",
5
+ "description": "Enable BatchDetachPolicy"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeBuild",
10
+ "description": "Supporting Bitbucket as source type in AWS CodeBuild."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.32.7 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CognitoIdentityProvider",
5
+ "description": "We have added support for features for Amazon Cognito User Pools that enable application developers to easily add and customize a sign-up and sign-in user experience, use OAuth 2.0, and integrate with Facebook, Google, Login with Amazon, and SAML-based identity providers."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeDeploy",
10
+ "description": "Adds support for specifying Application Load Balancers in deployment groups, for both in-place and blue\/green deployments."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "Provides customers an opportunity to recover an EIP that was released"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.33.0 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Batch",
5
+ "description": "This release enhances the DescribeJobs API to include the CloudWatch logStreamName attribute in ContainerDetail and ContainerDetailAttempt"
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "MigrationHub",
10
+ "description": "AWS Migration Hub provides a single location to track migrations across multiple AWS and partner solutions. Using Migration Hub allows you to choose the AWS and partner migration tools that best fit your needs, while providing visibility into the status of your entire migration portfolio. Migration Hub also provides key metrics and progress for individual applications, regardless of which tools are being used to migrate them. For example, you might use AWS Database Migration Service, AWS Server Migration Service, and partner migration tools to migrate an application comprised of a database, virtualized web servers, and a bare metal server. Using Migration Hub will provide you with a single screen that shows the migration progress of all the resources in the application. This allows you to quickly get progress updates across all of your migrations, easily identify and troubleshoot any issues, and reduce the overall time and effort spent on your migration projects. Migration Hub is available to all AWS customers at no additional charge. You only pay for the cost of the migration tools you use, and any resources being consumed on AWS."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EFS",
15
+ "description": "Customers can create encrypted EFS file systems and specify a KMS master key to encrypt it with."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "Glue",
20
+ "description": "AWS Glue is a fully managed extract, transform, and load (ETL) service that makes it easy for customers to prepare and load their data for analytics. You can create and run an ETL job with a few clicks in the AWS Management Console. You simply point AWS Glue to your data stored on AWS, and AWS Glue discovers your data and stores the associated metadata (e.g. table definition and schema) in the AWS Glue Data Catalog. Once cataloged, your data is immediately searchable, queryable, and available for ETL. AWS Glue generates the code to execute your data transformations and data loading processes. AWS Glue generates Python code that is entirely customizable, reusable, and portable. Once your ETL job is ready, you can schedule it to run on AWS Glue's fully managed, scale-out Spark environment. AWS Glue provides a flexible scheduler with dependency resolution, job monitoring, and alerting. AWS Glue is serverless, so there is no infrastructure to buy, set up, or manage. It automatically provisions the environment needed to complete the job, and customers pay only for the compute resources consumed while running ETL jobs. With AWS Glue, data can be available for analytics in minutes."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SSM",
25
+ "description": "Systems Manager Maintenance Windows include the following changes or enhancements: New task options using Systems Manager Automation, AWS Lambda, and AWS Step Functions; enhanced ability to edit the targets of a Maintenance Window, including specifying a target name and description, and ability to edit the owner field; enhanced ability to edits tasks; enhanced support for Run Command parameters; and you can now use a --safe flag when attempting to deregister a target. If this flag is enabled when you attempt to deregister a target, the system returns an error if the target is referenced by any task. Also, Systems Manager now includes Configuration Compliance to scan your fleet of managed instances for patch compliance and configuration inconsistencies. You can collect and aggregate data from multiple AWS accounts and Regions, and then drill down into specific resources that aren't compliant."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "StorageGateway",
30
+ "description": "Add optional field ForceDelete to DeleteFileShare api."
31
+ },
32
+ {
33
+ "type": "feature",
34
+ "category": "CloudHSMV2",
35
+ "description": "CloudHSM provides hardware security modules for protecting sensitive data and cryptographic keys within an EC2 VPC, and enable the customer to maintain control over key access and use. This is a second-generation of the service that will improve security, lower cost and provide better customer usability."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.33.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Fixed bug in EC2 clients preventing HostReservation from being set"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.33.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "",
5
+ "description": "Fixes a bug in `ClientResolver` that would provide incorrect information on required parameters set to `null` when resolving a client."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "GameLift",
10
+ "description": "The Matchmaking Grouping Service is a new feature that groups player match requests for a given game together into game sessions based on developer configured rules."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.33.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CodeStar",
5
+ "description": "Launch AWS CodeStar in the US West (N. California) and EU (London) regions."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.33.4 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Route53",
5
+ "description": "Amazon Route 53 now supports CAA resource record type. A CAA record controls which certificate authorities are allowed to issue certificates for the domain or subdomain."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Firehose",
10
+ "description": "This change will allow customers to attach a Firehose delivery stream to an existing Kinesis stream directly. You no longer need a forwarder to move data from a Kinesis stream to a Firehose delivery stream. You can now run your streaming applications on your Kinesis stream and easily attach a Firehose delivery stream to it for data delivery to S3, Redshift, or Elasticsearch concurrently."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.34.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "",
5
+ "description": "Fixes an issue where exceptions weren't being fully loaded when using a `SaveAs` parameter set to a file path on Guzzle v5."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "",
10
+ "description": "Update Composer to add dependencies on `simplexml`, `pcre`, `spl` and `json`. This change will cause Composer updates to fail if you do not have these PHP extensions installed."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "Changes to associations in Systems Manager State Manager can now be recorded. Previously, when you edited associations, you could not go back and review older association settings. Now, associations are versioned, and can be named using human-readable strings, allowing you to see a trail of association changes. You can also perform rate-based scheduling, which allows you to schedule associations more granularly."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.34.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "AppStream",
5
+ "description": "Documentation updates for appstream"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.34.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Rekognition",
5
+ "description": "Update the enum value of LandmarkType and GenderType to be consistent with service response"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.35.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Update CloudHSM smoke tests to CloudHSMV2"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "RDS",
10
+ "description": "Option group options now contain additional properties that identify requirements for certain options. Check these properties to determine if your DB instance must be in a VPC or have auto minor upgrade turned on before you can use an option. Check to see if you can downgrade the version of an option after you have installed it."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CloudFormation",
15
+ "description": "Rollback triggers enable you to have AWS CloudFormation monitor the state of your application during stack creation and updating, and to roll back that operation if the application breaches the threshold of any of the alarms you've specified."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "GameLift",
20
+ "description": "Update spelling of MatchmakingTicket status values for internal consistency."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.35.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "Increased the internal size limit of resourceId"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Provides capability to add secondary CIDR blocks to a VPC."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.35.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ApplicationAutoScaling",
5
+ "description": "Application Auto Scaling now supports the DisableScaleIn option for Target Tracking Scaling Policies. This allows customers to create scaling policies that will only add capacity to the target."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Organizations",
10
+ "description": "The exception ConstraintViolationException now contains a new reason subcode MASTERACCOUNT_MISSING_CONTACT_INFO to make it easier to understand why attempting to remove an account from an Organization can fail. We also improved several other of the text descriptions and examples."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.35.3 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Descriptions for Security Group Rules enables customers to be able to define a description for ingress and egress security group rules . The Descriptions for Security Group Rules feature supports one description field per Security Group rule for both ingress and egress rules . Descriptions for Security Group Rules provides a simple way to describe the purpose or function of a Security Group Rule allowing for easier customer identification of configuration elements . Prior to the release of Descriptions for Security Group Rules , customers had to maintain a separate system outside of AWS if they wanted to track Security Group Rule mapping and their purpose for being implemented. If a security group rule has already been created and you would like to update or change your description for that security group rule you can use the UpdateSecurityGroupRuleDescription API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "LexModelBuildingService",
10
+ "description": "Amazon Lex now supports synonyms for slot type values. If the user inputs a synonym, it will be resolved to the corresponding slot value."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticLoadBalancingv2",
15
+ "description": "This change now allows Application Load Balancers to distribute traffic to AWS resources using their IP addresses as targets in addition to the instance IDs. You can also load balance to resources outside the VPC hosting the load balancer using their IP addresses as targets. This includes resources in peered VPCs, EC2-Classic, and on-premises locations reachable over AWS Direct Connect or a VPN connection."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CodeBuild",
20
+ "description": "The AWS CodeBuild HTTP API now provides the BatchDeleteBuilds operation, which enables you to delete existing builds."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GameLift",
5
+ "description": "GameLift VPC resources can be peered with any other AWS VPC. R4 memory-optimized instances now available to deploy."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "Mobile",
10
+ "description": "AWS Mobile Hub is an integrated experience designed to help developers build, test, configure and release cloud-based applications for mobile devices using Amazon Web Services. AWS Mobile Hub provides a console and API for developers, allowing them to quickly select desired features and integrate them into mobile applications. Features include NoSQL Database, Cloud Logic, Messaging and Analytics. With AWS Mobile Hub, you pay only for the underlying services that Mobile Hub provisions based on the features you choose in the Mobile Hub console."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "Adding KMS encryption support to SSM Inventory Resource Data Sync. Exposes the ClientToken parameter on SSM StartAutomationExecution to provide idempotent execution requests."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeStar",
5
+ "description": "Added support to tag CodeStar projects. Tags can be used to organize and find CodeStar projects on key-value pairs that you can choose. For example, you could add a tag with a key of \"Release\" and a value of \"Beta\" to projects your organization is working on for an upcoming beta release."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.10 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Amazon EC2 now lets you opt for Spot instances to be stopped in the event of an interruption instead of being terminated. Your Spot request can be fulfilled again by restarting instances from a previously stopped state, subject to availability of capacity at or below your preferred price. When you submit a persistent Spot request, you can choose from \"terminate\" or \"stop\" as the instance interruption behavior. Choosing \"stop\" will shutdown your Spot instances so you can continue from this stopped state later on. This feature is only available for instances with Amazon EBS volume as their root device."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IAM",
10
+ "description": "A new API, DeleteServiceLinkedRole, submits a service-linked role deletion request and returns a DeletionTaskId, which you can use to check the status of the deletion."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SES",
15
+ "description": "Amazon Simple Email Service (Amazon SES) now lets you customize the domains used for tracking open and click events. Previously, open and click tracking links referred to destinations hosted on domains operated by Amazon SES. With this feature, you can use your own branded domains for capturing open and click events."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.11 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Fixed bug in EC2 clients preventing ElasticGpuSet from being set."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.12 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Greengrass",
5
+ "description": "AWS Greengrass is now available in the Asia Pacific (Tokyo) region, ap-northeast-1."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Greengrass",
10
+ "description": "Reset Deployments feature allows you to clean-up the cloud resource so you can delete the group. It also cleans up the core so that it goes back to the pre-deployment state."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AppStream",
15
+ "description": "API updates for supporting On-Demand fleets."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "RDS",
20
+ "description": "Introduces the --option-group-name parameter to the ModifyDBSnapshot CLI command. You can specify this parameter when you upgrade an Oracle DB snapshot. The same option group considerations apply when upgrading a DB snapshot as when upgrading a DB instance. For more information, see http:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/USER_UpgradeDBInstance.Oracle.html#USER_UpgradeDBInstance.Oracle.OGPG.OG"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CodePipeline",
25
+ "description": "This change includes a PipelineMetadata object that is part of the output from the GetPipeline API that includes the Pipeline ARN, created, and updated timestamp."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "LexRuntimeService",
30
+ "description": "Request attributes can be used to pass client specific information from the client to Amazon Lex as part of each request."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.13 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudWatchLogs",
5
+ "description": "Adds support for associating LogGroups with KMS Keys."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Budgets",
10
+ "description": "Including \"DuplicateRecordException\" in UpdateNotification and UpdateSubscriber. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "Add EC2 APIs to copy Amazon FPGA Images (AFIs) within the same region and across multiple regions, delete AFIs, and modify AFI attributes. AFI attributes include name, description and granting\/denying other AWS accounts to load the AFI."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.14 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "AWS Config support for DynamoDB tables and Auto Scaling resource types"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECS",
10
+ "description": "Amazon ECS users can now add and drop Linux capabilities to their containers through the use of docker's cap-add and cap-drop features. Customers can specify the capabilities they wish to add or drop for each container in their task definition. "
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "RDS",
15
+ "description": "Documentation updates for rds"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.15 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudFormation",
5
+ "description": "You can now prevent a stack from being accidentally deleted by enabling termination protection on the stack. If you attempt to delete a stack with termination protection enabled, the deletion fails and the stack, including its status, remains unchanged. You can enable termination protection on a stack when you create it. Termination protection on stacks is disabled by default. After creation, you can set termination protection on a stack whose status is CREATE_COMPLETE, UPDATE_COMPLETE, or UPDATE_ROLLBACK_COMPLETE."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.16 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Pinpoint",
5
+ "description": "Added two new push notification channels: Amazon Device Messaging (ADM) and, for push notification support in China, Baidu Cloud Push. Added support for APNs auth via .p8 key file. Added operation for direct message deliveries to user IDs, enabling you to message an individual user on multiple endpoints."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.17 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "rds",
5
+ "description": "Introduce DBSnapshotAvailable and DBSnapshotDeleted waiters for DBSnapshot"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MTurk",
10
+ "description": "Today, Amazon Mechanical Turk (MTurk) supports SQS Notifications being delivered to Customers' SQS queues when different stages of the MTurk workflow are complete. We are going to create new functionality so that Customers can leverage SNS topics as a destination for notification messages when various stages of the MTurk workflow are complete. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Route53",
15
+ "description": "This change allows customers to reset elements of health check."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Organizations",
20
+ "description": "This release flags the HandshakeParty structure's Type and Id fields as 'required'. They effectively were required in the past, as you received an error if you did not include them. This is now reflected at the API definition level. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CodeBuild",
25
+ "description": "Adding support for Building GitHub Pull Requests in AWS CodeBuild"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "AppStream",
30
+ "description": "Includes APIs for managing and accessing image builders, and deleting images."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.18 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CloudHSM",
5
+ "description": "Documentation updates for CloudHSM"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.19 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "This release includes service updates to AWS VPN."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "EC2 Systems Manager support for tagging SSM Documents. Also support for tag-based permissions to restrict access to SSM Documents based on these tags."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Budgets",
5
+ "description": "Add an optional \"thresholdType\" to notifications to support percentage or absolute value thresholds."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.20 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "",
5
+ "description": "Optionally preserve CommandPool keys during generation"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Route53Domains",
10
+ "description": "Added a new API that checks whether a domain name can be transferred to Amazon Route 53."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "KinesisAnalytics",
15
+ "description": "Kinesis Analytics now supports schema discovery on objects in S3. Additionally, Kinesis Analytics now supports input data preprocessing through Lambda."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.21 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "S3",
5
+ "description": "Properly parse s3:\/\/ uri used with StreamWrapper."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Redshift",
10
+ "description": "DescribeEventSubscriptions API supports tag keys and tag values as request parameters. "
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.22 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "SQS",
5
+ "description": "Documentation updates regarding availability of FIFO queues and miscellaneous corrections."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ConfigService",
10
+ "description": "Added missing enumeration values for ConfigurationItemStatus"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.23 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "SQS",
5
+ "description": "Documentation updates regarding availability of FIFO queues and miscellaneous corrections."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ConfigService",
10
+ "description": "Revert: Added missing enumeration values for ConfigurationItemStatus"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.24 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "OpsWorksCM",
5
+ "description": "Provide engine specific information for node associations."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticLoadBalancingv2",
10
+ "description": "Server Name Indication (SNI) is an extension to the TLS protocol by which a client indicates the hostname to connect to at the start of the TLS handshake. The load balancer can present multiple certificates through the same secure listener, which enables it to support multiple secure websites using a single secure listener. Application Load Balancers also support a smart certificate selection algorithm with SNI. If the hostname indicated by a client matches multiple certificates, the load balancer determines the best certificate to use based on multiple factors including the capabilities of the client."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "This release includes updates to AWS Virtual Private Gateway."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.25 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SES",
5
+ "description": "Added content related to email template management and templated email sending operations."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECR",
10
+ "description": "Adds support for new API set used to manage Amazon ECR repository lifecycle policies. Amazon ECR lifecycle policies enable you to specify the lifecycle management of images in a repository. The configuration is a set of one or more rules, where each rule defines an action for Amazon ECR to apply to an image. This allows the automation of cleaning up unused images, for example expiring images based on age or status. A lifecycle policy preview API is provided as well, which allows you to see the impact of a lifecycle policy on an image repository before you execute it"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.26 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeCommit",
5
+ "description": "This release includes the DeleteBranch API and a change to the contents of a Commit object."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DatabaseMigrationService",
10
+ "description": "This change includes addition of new optional parameter to an existing API"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticBeanstalk",
15
+ "description": "Added the ability to add, delete or update Tags"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "RDS",
20
+ "description": "You can now call DescribeValidDBInstanceModifications to learn what modifications you can make to your DB instance. You can use this information when you call ModifyDBInstance."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Polly",
25
+ "description": "Amazon Polly exposes two new voices: \"Matthew\" (US English) and \"Takumi\" (Japanese)"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.27 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "You can now change the tenancy of your VPC from dedicated to default with a single API operation. For more details refer to the documentation for changing VPC tenancy."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "RDS",
10
+ "description": "Adds waiters for DBSnapshotAvailable and DBSnapshotDeleted."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "WAF",
15
+ "description": "This release adds support for regular expressions as match conditions in rules, and support for geographical location by country of request IP address as a match condition in rules."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "CloudHSM",
20
+ "description": "Documentation updates for AWS CloudHSM Classic."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "WAFRegional",
25
+ "description": "This release adds support for regular expressions as match conditions in rules, and support for geographical location by country of request IP address as a match condition in rules."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "ElasticsearchService",
30
+ "description": "AWS Elasticsearch adds support for enabling slow log publishing. Using slow log publishing options customers can configure and enable index\/query slow log publishing of their domain to preferred AWS Cloudwatch log group."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.28 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3",
5
+ "description": "No longer override supplied ContentType parameter when performing a multipart upload."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CloudHSMV2",
10
+ "description": "Service Region Launch."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticsearchService",
15
+ "description": "This release adds support for VPC access to Amazon Elasticsearch Service."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.29 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lightsail",
5
+ "description": "This release adds support for Windows Server-based Lightsail instances. The GetInstanceAccessDetails API now returns the password of your Windows Server-based instance when using the default key pair. GetInstanceAccessDetails also returns a PasswordData object for Windows Server instances containing the ciphertext and keyPairName. The Blueprint data type now includes a list of platform values (LINUX_UNIX or WINDOWS). The Bundle data type now includes a list of SupportedPlatforms values (LINUX_UNIX or WINDOWS)."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.3 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Route53",
5
+ "description": "You can configure Amazon Route 53 to log information about the DNS queries that Amazon Route 53 receives for your domains and subdomains. When you configure query logging, Amazon Route 53 starts to send logs to CloudWatch Logs. You can use various tools, including the AWS console, to access the query logs."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticLoadBalancingv2",
10
+ "description": "The feature enables the new Network Load Balancer that is optimized to handle volatile traffic patterns while using a single static IP address per Availability Zone. Network Load Balancer operates at the connection level (Layer 4), routing connections to Amazon EC2 instances and containers, within Amazon Virtual Private Cloud (Amazon VPC) based on IP protocol data."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "LexModelBuildingService",
15
+ "description": "Amazon Lex provides the ability to export your Amazon Lex chatbot definition as a JSON file that can be added to the target platform. The JSON configuration file contains the structure of your Amazon Lex chatbot, including the intent schema with utterances, slots, prompts and slot-types."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "With Tagging support, you can add Key and Value metadata to search, filter and organize your NAT Gateways according to your organization's needs."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "ApplicationAutoScaling",
25
+ "description": "Documentation updates for application-autoscaling"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.30 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3",
5
+ "description": "PostObject[V4] classes now obey use_path_style_endpoint client configuration in form generation."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "EC2 Systems Manager versioning support for Parameter Store. Also support for referencing parameter versions in SSM Documents."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SQS",
15
+ "description": "Added support for tracking cost allocation by adding, updating, removing, and listing the metadata tags of Amazon SQS queues."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.31 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Adding pagination support for DescribeSecurityGroups for EC2 Classic and VPC Security Groups"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.32 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "",
5
+ "description": "Override passed in starting token for a ResultPaginator when moving to the next command."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Organizations",
10
+ "description": "This release supports integrating other AWS services with AWS Organizations through the use of an IAM service-linked role called AWSServiceRoleForOrganizations. Certain operations automatically create that role if it does not already exist."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.33 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Glue",
5
+ "description": "AWS Glue: Adding a new API, BatchStopJobRun, to stop one or more job runs for a specified Job. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Pinpoint",
10
+ "description": "Added support for APNs VoIP messages. Added support for collapsible IDs, message priority, and TTL for APNs and FCM\/GCM."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ConfigService",
15
+ "description": "AWS Config support for CodeBuild Project resource type"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElastiCache",
20
+ "description": "Amazon ElastiCache for Redis today announced support for data encryption both for data in-transit and data at-rest. The new encryption in-transit functionality enables ElastiCache for Redis customers to encrypt data for all communication between clients and Redis engine, and all intra-cluster Redis communication. The encryption at-rest functionality allows customers to encrypt their S3 based backups. Customers can begin using the new functionality by simply enabling this functionality via AWS console, and a small configuration change in their Redis clients. The ElastiCache for Redis service automatically manages life cycle of the certificates required for encryption, including the issuance, renewal and expiration of certificates. Additionally, as part of this launch, customers will gain the ability to start using the Redis AUTH command that provides an added level of authentication."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.34 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudFront",
5
+ "description": "You can now specify additional options for MinimumProtocolVersion, which controls the SSL\/TLS protocol that CloudFront uses to communicate with viewers. The minimum protocol version that you choose also determines the ciphers that CloudFront uses to encrypt the content that it returns to viewers."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "You are now able to create and launch EC2 P3 instance, next generation GPU instances, optimized for machine learning and high performance computing applications. With up to eight NVIDIA Tesla V100 GPUs, P3 instances provide up to one petaflop of mixed-precision, 125 teraflops of single-precision, and 62 teraflops of double-precision floating point performance, as well as a 300 GB\/s second-generation NVLink interconnect that enables high-speed, low-latency GPU-to-GPU communication. P3 instances also feature up to 64 vCPUs based on custom Intel Xeon E5 (Broadwell) processors, 488 GB of DRAM, and 25 Gbps of dedicated aggregate network bandwidth using the Elastic Network Adapter (ENA)."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.35 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DirectConnect",
5
+ "description": "AWS DirectConnect now provides support for Global Access for Virtual Private Cloud (VPC) via a new feature called Direct Connect Gateway. A Direct Connect Gateway will allow you to group multiple Direct Connect Private Virtual Interfaces (DX-VIF) and Private Virtual Gateways (VGW) from different AWS regions (but belonging to the same AWS Account) and pass traffic from any DX-VIF to any VPC in the grouping."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "ACM",
10
+ "description": "Documentation updates for acm"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "CloudHSMV2",
15
+ "description": "Minor documentation update for AWS CloudHSM (cloudhsmv2)."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.36 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "This release supports creating and managing Regional and Edge-Optimized API endpoints."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.37 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "Amazon ECS users can now add devices to their containers and enable init process in containers through the use of docker's 'devices' and 'init' features. These fields can be specified under linuxParameters in ContainerDefinition in the Task Definition Template. "
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.4 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudWatchLogs",
5
+ "description": "Adds support for the PutResourcePolicy, DescribeResourcePolicy and DeleteResourcePolicy APIs."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.5 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DeviceFarm",
5
+ "description": "DeviceFarm has added support for two features - RemoteDebugging and Customer Artifacts. Customers can now do remote Debugging on their Private Devices and can now retrieve custom files generated by their tests on the device and the device host (execution environment) on both public and private devices. "
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.6 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Fixed bug in EC2 clients preventing HostOfferingSet from being set"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.7 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Batch",
5
+ "description": "Documentation updates for batch"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudWatchEvents",
10
+ "description": "Exposes ConcurrentModificationException as one of the valid exceptions for PutPermission and RemovePermission operation."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "You are now able to create and launch EC2 x1e.32xlarge instance, a new EC2 instance in the X1 family, in us-east-1, us-west-2, eu-west-1, and ap-northeast-1. x1e.32xlarge offers 128 vCPUs, 3,904 GiB of DDR4 instance memory, high memory bandwidth, large L3 caches, and leading reliability capabilities to boost the performance and reliability of in-memory applications."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "AutoScaling",
20
+ "description": "Customers can create Life Cycle Hooks at the time of creating Auto Scaling Groups through the CreateAutoScalingGroup API"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.8 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeBuild",
5
+ "description": "Supporting Parameter Store in environment variables for AWS CodeBuild"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ServiceCatalog",
10
+ "description": "This release of Service Catalog adds API support to copy products."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Organizations",
15
+ "description": "Documentation updates for AWS Organizations"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.36.9 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "Add a new enum \"REQUEST\" to '--type <value>' field in the current create-authorizer API, and make \"identitySource\" optional."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.37.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Organizations",
5
+ "description": "This release updates permission statements for several API operations, and corrects some other minor errors."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SFN",
10
+ "description": "Documentation update."
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "Pricing",
15
+ "description": "This is the initial release of AWS Price List Service."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "KMS",
20
+ "description": "Documentation updates for AWS KMS. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EC2",
25
+ "description": "You are now able to create and launch EC2 C5 instances, the next generation of EC2's compute-optimized instances, in us-east-1, us-west-2 and eu-west-1. C5 instances offer up to 72 vCPUs, 144 GiB of DDR4 instance memory, 25 Gbps in Network bandwidth and improved EBS and Networking bandwidth on smaller instance sizes to deliver improved performance for compute-intensive workloads."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.37.1 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ServiceCatalog",
5
+ "description": "Region launch expansion for SCS in new region AP-SOUTH-1 BOM"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "RDS",
10
+ "description": "DescribeOrderableDBInstanceOptions now returns the minimum and maximum allowed values for storage size, total provisioned IOPS, and provisioned IOPS per GiB for a DB instance."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "S3",
15
+ "description": "This releases adds support for 4 features: 1. Default encryption for S3 Bucket, 2. Encryption status in inventory and Encryption support for inventory. 3. Cross region replication of KMS-encrypted objects, and 4. ownership overwrite for CRR. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElasticLoadBalancingv2",
20
+ "description": "Added a new limit related to Network Load Balancers on the number of targets per load balancer per AZ."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "ServiceCatalog",
25
+ "description": "Region launch expansion of Service Catalog Service for new region US-WEST-1"
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "ServiceCatalog",
30
+ "description": "Region launch expansion of SCS for new region SA-EAST-1"
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.38.0 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "Rds",
5
+ "description": "Update PresignUrlMiddleware to take an optional require_different_region, default false, for providing presigned urls only if the source and destination regions differ. Require this for RdsClient operations that use the middleware."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "S3",
10
+ "description": "Adds the S3EncryptionClient with CBC and GCM support. Uses pluggable strategies for handling a MetadataEnvelope in conjunction with a MaterialsProvider. Supports putObject[Async] and getObject[Async] operations."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ApplicationAutoScaling",
15
+ "description": "Application Auto Scaling customers are now able to schedule adjustments to their MinCapacity and MaxCapacity, which makes it possible to pre-provision adequate capacity for anticipated demand and then reduce the provisioned capacity as demand lulls."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "AWS PrivateLink for Amazon Services - Customers can now privately access Amazon services from their Amazon Virtual Private Cloud (VPC), without using public IPs, and without requiring the traffic to traverse across the Internet."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "S3",
25
+ "description": "Updates several S3 endpoints."
26
+ },
27
+ {
28
+ "type": "enhancement",
29
+ "category": "Batch",
30
+ "description": "Documentation updates for AWS Batch."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "ElastiCache",
35
+ "description": "This release adds online resharding for ElastiCache for Redis offering, providing the ability to add and remove shards from a running cluster. Developers can now dynamically scale-out or scale-in their Redis cluster workloads to adapt to changes in demand. ElastiCache will resize the cluster by adding or removing shards and redistribute hash slots uniformly across the new shard configuration, all while the cluster continues to stay online and serves requests."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.38.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Introduces the following features: 1. Create a default subnet in an Availability Zone if no default subnet exists. 2. Spot Fleet integrates with Elastic Load Balancing to enable you to attach one or more load balancers to a Spot Fleet request. When you attach the load balancer, it automatically registers the instance in the Spot Fleet to the load balancers which distributes incoming traffic across the instances. "
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.38.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Route53",
5
+ "description": "When a Route 53 health check or hosted zone is created by a linked AWS service, the object now includes information about the service that created it. Hosted zones or health checks that are created by a linked service can't be updated or deleted using Route 53."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECS",
10
+ "description": "Added new mode for Task Networking in ECS, called awsvpc mode. Mode configuration parameters to be passed in via awsvpcConfiguration. Updated APIs now use\/show this new mode - RegisterTaskDefinition, CreateService, UpdateService, RunTask, StartTask."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "EC2 Systems Manager GetInventory API adds support for aggregation."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Lightsail",
20
+ "description": "Lightsail now supports attached block storage, which allows you to scale your applications and protect application data with additional SSD-backed storage disks. This feature allows Lightsail customers to attach secure storage disks to their Lightsail instances and manage their attached disks, including creating and deleting disks, attaching and detaching disks from instances, and backing up disks via snapshot."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.38.3 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "1. Extended GetDocumentationParts operation to support retrieving documentation parts resources without contents. 2. Added hosted zone ID in the custom domain response."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Polly",
10
+ "description": "Amazon Polly adds Korean language support with new female voice - \"Seoyeon\" and new Indian English female voice - \"Aditi\""
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SES",
15
+ "description": "SES launches Configuration Set Reputation Metrics and Email Pausing Today, two features that build upon the capabilities of the reputation dashboard. The first is the ability to export reputation metrics for individual configuration sets. The second is the ability to temporarily pause email sending, either at the configuration set level, or across your entire Amazon SES account."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SFN",
20
+ "description": "You can now use the UpdateStateMachine API to update your state machine definition and role ARN. Existing executions will continue to use the previous definition and role ARN. You can use the DescribeStateMachineForExecution API to determine which state machine definition and role ARN is associated with an execution"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.38.4 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Route53",
5
+ "description": "You can use Route 53's GetAccountLimit\/GetHostedZoneLimit\/GetReusableDelegationSetLimit APIs to view your current limits (including custom set limits) on Route 53 resources such as hosted zones and health checks. These APIs also return the number of each resource you're currently using to enable comparison against your current limits."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "OpsWorksCM",
10
+ "description": "Documentation updates for OpsWorks-cm: a new feature, OpsWorks for Puppet Enterprise, that allows users to create and manage OpsWorks-hosted Puppet Enterprise servers."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Organizations",
15
+ "description": "This release adds APIs that you can use to enable and disable integration with AWS services designed to work with AWS Organizations. This integration allows the AWS service to perform operations on your behalf on all of the accounts in your organization. Although you can use these APIs yourself, we recommend that you instead use the commands provided in the other AWS service to enable integration with AWS Organizations."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "You are now able to create and launch EC2 x1e smaller instance sizes"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ApplicationAutoScaling",
25
+ "description": "Application Auto Scaling now supports automatic scaling of Amazon Aurora replicas"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Glue",
30
+ "description": "API update for AWS Glue. New crawler configuration attribute enables customers to specify crawler behavior. New XML classifier enables classification of XML data."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.38.5 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DatabaseMigrationService",
5
+ "description": "Support for migration task assessment. Support for data validation after the migration."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "RDS",
10
+ "description": "Amazon RDS now supports importing MySQL databases by using backup files from Amazon S3."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ElasticLoadBalancingv2",
15
+ "description": "This release adds Proxy Protocol v2 support for Network Load Balancer. Proxy protocol provides a convenient way to transport connection information (such as a client's source IP address\/port and destination IP address\/port) for a TCP connection across multiple layers of NAT or TCP proxies."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ApplicationAutoScaling",
20
+ "description": "This SDK update contains support for Target Tracking scaling for EC2 Spot Fleet. It allows you to scale an EC2 Spot Fleet using a Target Tracking scaling policy."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "S3",
25
+ "description": "Added ORC to the supported S3 Inventory formats."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.39.0 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "CostExplorer",
5
+ "description": "The AWS Cost Explorer API gives customers programmatic access to AWS cost and usage information, allowing them to perform adhoc queries and build interactive cost management applications that leverage this dataset."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "WorkDocs",
10
+ "description": "DescribeGroups API and miscellaneous enhancements"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "APIGateway",
15
+ "description": "Documentation updates for Apigateway"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CodeCommit",
20
+ "description": "AWS CodeCommit now supports pull requests. You can use pull requests to collaboratively review code changes for minor changes or fixes, major feature additions, or new versions of your released software."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Firehose",
25
+ "description": "This release includes a new Kinesis Firehose feature that supports Splunk as Kinesis Firehose delivery destination. You can now use Kinesis Firehose to ingest real-time data to Splunk in a serverless, reliable, and salable manner. This release also includes a new feature that allows you to configure Lambda buffer size in Kinesis Firehose data transformation feature. You can now customize the data buffer size before invoking Lambda function in Kinesis Firehose for data transformation. This feature allows you to flexibly trade-off processing and delivery latency with cost and efficiency based on your specific use cases and requirements. "
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Kinesis",
30
+ "description": "Customers can now obtain the important characteristics of their stream with DescribeStreamSummary. The response will not include the shard list for the stream but will have the number of open shards, and all the other fields included in the DescribeStream response."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.39.1 ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Rekognition",
5
+ "description": "This release includes updates to Amazon Rekognition for the following APIs. The new DetectText API allows you to recognize and extract textual content from images. Face Model Versioning has been added to operations that deal with face detection."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "StorageGateway",
10
+ "description": "AWS Storage Gateway now enables you to get notification when all your files written to your NFS file share have been uploaded to Amazon S3. Storage Gateway also enables guessing of the MIME type for uploaded objects based on file extensions."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Shield",
15
+ "description": "The AWS Shield SDK has been updated in order to support Elastic IP address protections, the addition of AttackProperties objects in DescribeAttack responses, and a new GetSubscriptionState operation."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "XRay",
20
+ "description": "Added automatic pagination support for AWS X-Ray APIs in the SDKs that support this feature."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EMR",
25
+ "description": "Enable Kerberos on Amazon EMR. "
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "APIGateway",
30
+ "description": "Add support for Access logs and customizable integration timeouts"
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "CloudFormation",
35
+ "description": "1) Instance-level parameter overrides (CloudFormation-StackSet feature): This feature will allow the customers to override the template parameters on specific stackInstances. Customers will also have ability to update their existing instances with\/without parameter-overrides using a new API \"UpdateStackInstances\" 2) Add support for SSM parameters in CloudFormation - This feature will allow the customers to use Systems Manager parameters in CloudFormation templates. They will be able to see values for these parameters in Describe APIs."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "CodeBuild",
40
+ "description": "Adding support for accessing Amazon VPC resources from AWS CodeBuild, dependency caching and build badges."
41
+ }
42
+ ]
vendor/aws/aws-sdk-php/.changes/3.39.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3\\Crypto",
5
+ "description": "Fixes an issue with loading @CipherOptions on getObject[Async] decryption."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "LexModelBuildingService",
10
+ "description": "Amazon Lex is now available in the EU (Ireland) region."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "LexRuntimeService",
15
+ "description": "Amazon Lex is now available in the EU (Ireland) region."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ACM",
20
+ "description": "AWS Certificate Manager now supports the ability to import domainless certs and additional Key Types as well as an additional validation method for DNS."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.40.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "MediaPackage",
5
+ "description": "AWS Elemental MediaPackage is a just-in-time video packaging and origination service that lets you format highly secure and reliable live outputs for a variety of devices."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "MediaLive",
10
+ "description": "AWS Elemental MediaLive is a video service that lets you easily create live outputs for broadcast and streaming delivery."
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "MediaStoreData",
15
+ "description": "AWS Elemental MediaStore is an AWS storage service optimized for media. It gives you the performance, consistency, and low latency required to deliver live and on-demand video content. AWS Elemental MediaStore acts as the origin store in your video workflow."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "MediaStore",
20
+ "description": "AWS Elemental MediaStore is an AWS storage service optimized for media. It gives you the performance, consistency, and low latency required to deliver live and on-demand video content. AWS Elemental MediaStore acts as the origin store in your video workflow."
21
+ },
22
+ {
23
+ "type": "feature",
24
+ "category": "MediaConvert",
25
+ "description": "AWS Elemental MediaConvert is a file-based video conversion service that transforms media into formats required for traditional broadcast and for internet streaming to multi-screen devices."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.41.0 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "MQ",
5
+ "description": "This is the initial SDK release for Amazon MQ. Amazon MQ is a managed message broker service for Apache ActiveMQ that makes it easy to set up and operate message brokers in the cloud. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CognitoIdentityProvider",
10
+ "description": "AWS Cognito SDK has been updated to support new Cognito user-pool objects and operations for advanced security"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "APIGateway",
15
+ "description": "Changes related to CanaryReleaseDeployment feature. Enables API developer to create a deployment as canary deployment and test API changes with percentage of customers before promoting changes to all customers."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "Adds the following updates: 1. You are now able to host a service powered by AWS PrivateLink to provide private connectivity to other VPCs. You are now also able to create endpoints to other services powered by PrivateLink including AWS services, Marketplace Seller services or custom services created by yourself or other AWS VPC customers. 2. You are now able to save launch parameters in a single template that can be used with Auto Scaling, Spot Fleet, Spot, and On Demand instances. 3. You are now able to launch Spot instances via the RunInstances API, using a single additional parameter. RunInstances will response synchronously with an instance ID should capacity be available for your Spot request. 4. A simplified Spot pricing model which delivers low, predictable prices that adjust gradually, based on long-term trends in supply and demand. 5. Amazon EC2 Spot can now hibernate Amazon EBS-backed instances in the event of an interruption, so your workloads pick up from where they left off. Spot can fulfill your request by resuming instances from a hibernated state when capacity is available."
21
+ },
22
+ {
23
+ "type": "feature",
24
+ "category": "GuardDuty",
25
+ "description": "Enable Amazon GuardDuty to continuously monitor and process AWS data sources to identify threats to your AWS accounts and workloads. You can add customization by uploading additional threat intelligence lists and IP safe lists. You can list security findings, suspend, and disable the service. "
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "Lambda",
30
+ "description": "Lambda aliases can now shift traffic between two function versions, based on preassigned weights."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "CodeDeploy",
35
+ "description": "Support for AWS Lambda function deployment - AWS CodeDeploy now supports the deployment of AWS Lambda functions. A Lambda deployment uses a Lambda function alias to shift traffic to a new version. You select a deployment configuration that specifies exactly how traffic shifts to your new version. Success of a deployment can be validated using Lambda functions that are referenced by the deployment. This provides the opportunity to rollback if necessary."
36
+ },
37
+ {
38
+ "type": "feature",
39
+ "category": "AppSync",
40
+ "description": "AWS AppSync is an enterprise-level, fully managed GraphQL service with real-time data synchronization and offline programming features."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "Batch",
45
+ "description": "Add support for Array Jobs which allow users to easily submit many copies of a job with a single API call. This change also enhances the job dependency model to support N_TO_N and sequential dependency chains. The ListJobs and DescribeJobs APIs now have the ability to list or describe the status of entire Array Jobs or individual elements within the array."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.42.0 ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "SageMakerRuntime",
5
+ "description": "Amazon SageMaker is a fully-managed service that enables data scientists and developers to quickly and easily build, train, and deploy machine learning models, at scale."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "IoTJobsDataPlane",
10
+ "description": "This release adds support for new the service called Iot Jobs. This client is built for the device SDK to use Iot Jobs Device specific APIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Rekognition",
15
+ "description": "This release introduces Amazon Rekognition support for video analysis."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "SageMaker",
20
+ "description": "Amazon SageMaker is a fully-managed service that enables data scientists and developers to quickly and easily build, train, and deploy machine learning models, at scale."
21
+ },
22
+ {
23
+ "type": "feature",
24
+ "category": "Translate",
25
+ "description": "Public preview release of Amazon Translate and the Amazon Translate Developer Guide. For more information, see the Amazon Translate Developer Guide."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "DynamoDB",
30
+ "description": "Amazon DynamoDB now supports the following features: Global Table and On-Demand Backup. Global Table is a fully-managed, multi-region, multi-master database. DynamoDB customers can now write anywhere and read anywhere with single-digit millisecond latency by performing database operations closest to where end users reside. Global Table also enables customers to disaster-proof their applications, keeping them running and data accessible even in the face of natural disasters or region disruptions. Customers can set up Global Table with just a few clicks in the AWS Management Console-no application rewrites required. On-Demand Backup capability is to protect data from loss due to application errors, and meet customers' archival needs for compliance and regulatory reasons. Customers can backup and restore their DynamoDB table data anytime, with a single-click in the AWS management console or a single API call. Backup and restore actions execute with zero impact on table performance or availability. For more information, see the Amazon DynamoDB Developer Guide."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "Glacier",
35
+ "description": "This release includes support for Glacier Select, a new feature that allows you to filter and analyze your Glacier archives and store the results in a user-specified S3 location."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "S3",
40
+ "description": "This release includes support for Glacier Select, a new feature that allows you to filter and analyze your Glacier storage class objects and store the results in a user-specified S3 location."
41
+ },
42
+ {
43
+ "type": "feature",
44
+ "category": "Comprehend",
45
+ "description": "Amazon Comprehend is an AWS service for gaining insight into the content of text and documents . It develops insights by recognizing the entities, key phrases, language, sentiments, and other common elements in a document. For more information, go to the Amazon Comprehend product page. To get started, see the Amazon Comprehend Developer Guide."
46
+ },
47
+ {
48
+ "type": "api-change",
49
+ "category": "ECS",
50
+ "description": "Amazon Elastic Container Service (Amazon ECS) released a new launch type for running containers on a serverless infrastructure. The Fargate launch type allows you to run your containerized applications without the need to provision and manage the backend infrastructure. Just register your task definition and Fargate launches the container for you. "
51
+ },
52
+ {
53
+ "type": "feature",
54
+ "category": "KinesisVideo",
55
+ "description": "Announcing Amazon Kinesis Video Streams, a fully managed video ingestion and storage service. Kinesis Video Streams makes it easy to securely stream video from connected devices to AWS for machine learning, analytics, and processing. You can also stream other time-encoded data like RADAR and LIDAR signals using Kinesis Video Streams."
56
+ },
57
+ {
58
+ "type": "feature",
59
+ "category": "KinesisVideoMedia",
60
+ "description": "Announcing Amazon Kinesis Video Streams, a fully managed video ingestion and storage service. Kinesis Video Streams makes it easy to securely stream video from connected devices to AWS for machine learning, analytics, and processing. You can also stream other time-encoded data like RADAR and LIDAR signals using Kinesis Video Streams."
61
+ },
62
+ {
63
+ "type": "api-change",
64
+ "category": "IoT",
65
+ "description": "This release adds support for a number of new IoT features, including AWS IoT Device Management (Jobs, Fleet Index and Thing Registration), Thing Groups, Policies on Thing Groups, Registry & Job Events, JSON Logs, Fine-Grained Logging Controls, Custom Authorization and AWS Service Authentication Using X.509 Certificates."
66
+ },
67
+ {
68
+ "type": "api-change",
69
+ "category": "Greengrass",
70
+ "description": "Greengrass OTA feature allows updating Greengrass Core and Greengrass OTA Agent. Local Resource Access feature allows Greengrass Lambdas to access local resources such as peripheral devices and volumes."
71
+ },
72
+ {
73
+ "type": "feature",
74
+ "category": "KinesisVideoArchivedMedia",
75
+ "description": "Announcing Amazon Kinesis Video Streams, a fully managed video ingestion and storage service. Kinesis Video Streams makes it easy to securely stream video from connected devices to AWS for machine learning, analytics, and processing. You can also stream other time-encoded data like RADAR and LIDAR signals using Kinesis Video Streams."
76
+ }
77
+ ]
vendor/aws/aws-sdk-php/.changes/3.43.0 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "WAF",
5
+ "description": "This release adds support for rule group and managed rule group. Rule group is a container of rules that customers can create, put rules in it and associate the rule group to a WebACL. All rules in a rule group will function identically as they would if each rule was individually associated to the WebACL. Managed rule group is a pre-configured rule group composed by our security partners and made available via the AWS Marketplace. Customers can subscribe to these managed rule groups, associate the managed rule group to their WebACL and start using them immediately to protect their resources."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Adds the following updates: 1. T2 Unlimited enables high CPU performance for any period of time whenever required 2. You are now able to create and launch EC2 m5 and h1 instances"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "This release updates AWS Systems Manager APIs to enable executing automations at controlled rate, target resources in a resource groups and execute entire automation at once or single step at a time. It is now also possible to use YAML, in addition to JSON, when creating Systems Manager documents."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Lightsail",
20
+ "description": "This release adds support for load balancer and TLS\/SSL certificate management. This set of APIs allows customers to create, manage, and scale secure load balanced applications on Lightsail infrastructure. To provide support for customers who manage their DNS on Lightsail, we've added the ability create an Alias A type record which can point to a load balancer DNS name via the CreateDomainEntry API http:\/\/docs.aws.amazon.com\/lightsail\/2016-11-28\/api-reference\/API_CreateDomainEntry.html."
21
+ },
22
+ {
23
+ "type": "feature",
24
+ "category": "ResourceGroups",
25
+ "description": "AWS Resource Groups lets you search and group AWS resources from multiple services based on their tags."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "WAFRegional",
30
+ "description": "This release adds support for rule group and managed rule group. Rule group is a container of rules that customers can create, put rules in it and associate the rule group to a WebACL. All rules in a rule group will function identically as they would if each rule was individually associated to the WebACL. Managed rule group is a pre-configured rule group composed by our security partners and made available via the AWS Marketplace. Customers can subscribe to these managed rule groups, associate the managed rule group to their WebACL and start using them immediately to protect their resources."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "AutoScaling",
35
+ "description": "You can now use Auto Scaling with EC2 Launch Templates via the CreateAutoScalingGroup and UpdateAutoScalingGroup APIs."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.44.0 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "AlexaForBusiness",
5
+ "description": "Alexa for Business is now generally available for production use. Alexa for Business makes it easy for you to use Alexa in your organization. The Alexa for Business SDK gives you APIs to manage Alexa devices, enroll users, and assign skills at scale. For more information about Alexa for Business, go to https:\/\/aws.amazon.com\/alexaforbusiness "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "APIGateway",
10
+ "description": "Added support Private Integration and VPC Link features in API Gateway. This allows to create an API with the API Gateway private integration, thus providing clients access to HTTP\/HTTPS resources in an Amazon VPC from outside of the VPC through a VpcLink resource."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Lambda",
15
+ "description": "AWS Lambda now supports the ability to set the concurrency limits for individual functions, and increasing memory to 3008 MB."
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "ServerlessApplicationRepository",
20
+ "description": "First release of the AWS Serverless Application Repository SDK"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "EC2",
25
+ "description": "Adds the following updates: 1. Spread Placement ensures that instances are placed on distinct hardware in order to reduce correlated failures. 2. Inter-region VPC Peering allows customers to peer VPCs across different AWS regions without requiring additional gateways, VPN connections or physical hardware "
26
+ },
27
+ {
28
+ "type": "feature",
29
+ "category": "Cloud9",
30
+ "description": "Adds support for creating and managing AWS Cloud9 development environments. AWS Cloud9 is a cloud-based integrated development environment (IDE) that you use to write, run, and debug code."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.44.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SageMaker",
5
+ "description": "Preparing to release updated waiters week of December 4, 2017 for all supported SDKs."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.44.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ECS",
5
+ "description": "Documentation updates for ecs"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Budgets",
10
+ "description": "Add additional costTypes to support finer control for different charges included in a cost budget."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.45.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Test",
5
+ "description": "Refactored some tests with PHPUnit assert methods."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ServiceCatalog",
10
+ "description": "ServiceCatalog has two distinct personas for its use, an \"admin\" persona (who creates sets of products with different versions and prescribes who has access to them) and an \"end-user\" persona (who can launch cloud resources based on the configuration data their admins have given them access to). This API update will allow admin users to deactivate\/activate product versions, end-user will only be able to access and launch active product versions. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "IoT",
15
+ "description": "Add error action API for RulesEngine. "
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "ServiceDiscovery",
20
+ "description": "Amazon Route 53 Auto Naming lets you configure public or private namespaces that your microservice applications run in. When instances of the service become available, you can call the Auto Naming API to register the instance, and Amazon Route 53 automatically creates up to five DNS records and an optional health check. Clients that submit DNS queries for the service receive an answer that contains up to eight healthy records."
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "Test",
25
+ "description": "Use PHPUnit\\Framework\\TestCase instead of PHPUnit_Framework_TestCase"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.45.1 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ElasticBeanstalk",
5
+ "description": "Documentation updates for AWS Elastic Beanstalk."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudDirectory",
10
+ "description": "Amazon Cloud Directory makes it easier for you to apply schema changes across your directories with in-place schema upgrades. Your directories now remain available while backward-compatible schema changes are being applied, such as the addition of new fields. You also can view the history of your schema changes in Cloud Directory by using both major and minor version identifiers, which can help you track and audit schema versions across directories."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "Initial waiters for common SageMaker workflows."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.45.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SES",
5
+ "description": "Customers can customize the emails that Amazon SES sends when verifying new identities. This feature is helpful for developers whose applications send email through Amazon SES on behalf of their customers."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticsearchService",
10
+ "description": "Added support for encryption of data at rest on Amazon Elasticsearch Service using AWS KMS"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.45.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppStream",
5
+ "description": "This API update is to support the feature that allows customers to automatically consume the latest Amazon AppStream 2.0 agent as and when published by AWS."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudWatch",
10
+ "description": "With this launch, you can now create a CloudWatch alarm that alerts you when M out of N datapoints of a metric are breaching your predefined threshold, such as three out of five times in any given five minutes interval or two out of six times in a thirty minutes interval. When M out of N datapoints are not breaching your threshold in an interval, the alarm will be in OK state. Please note that the M datapoints out of N datapoints in an interval can be of any order and does not need to be consecutive. Consequently, you can now get alerted even when the spikes in your metrics are intermittent over an interval."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ECS",
15
+ "description": "Documentation updates for Windows containers."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.46.0 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Pinpoint",
5
+ "description": "Resolves a naming collision with Pinpoint getEndpoint operation and AwsClient::getEndpoint. All Endpoint operations have aliases with UserEndpoint."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Test",
10
+ "description": "More refactored tests with PHPUnit assert methods."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CognitoIdentityProvider",
15
+ "description": "Exposing the hosted UI domain name for a user pool that has a domain configured."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SageMaker",
20
+ "description": "CreateModel API Update: The request parameter 'ExecutionRoleArn' has changed from optional to required."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "LexModelBuildingService",
25
+ "description": "The GetBotChannelAssociation API now returns the status and failure reason, if any, for a bot channel."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.47.0 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CodeDeploy",
5
+ "description": "Documentation updates for CodeDeploy."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "WorkMail",
10
+ "description": "Today, Amazon WorkMail released an administrative SDK and enabled AWS CloudTrail integration. With the administrative SDK, you can natively integrate WorkMail with your existing services. The SDK enables programmatic user, resource, and group management through API calls. This means your existing IT tools and workflows can now automate WorkMail management, and third party applications can streamline WorkMail migrations and account actions. "
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.47.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "Adds support for Cognito Authorizer scopes at the API method level."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "SES",
10
+ "description": "Added information about the maximum number of transactions per second for the SendCustomVerificationEmail operation."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "S3\\Crypto",
5
+ "description": "Adds the S3EncryptionMultipartUploader for performing client side encryption before performing a multipart upload operation."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Inspector",
10
+ "description": "expand the region support of Inspector to FRA (eu-central-1)"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AppStream",
15
+ "description": "This API update is to enable customers to add tags to their Amazon AppStream 2.0 resources"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CloudWatch",
5
+ "description": "Documentation updates for monitoring"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "ServiceCatalog",
10
+ "description": "Region launch expansion of Service Catalog Service for new region EU-WEST-3"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.10 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DirectoryService",
5
+ "description": "On October 24 we introduced AWS Directory Service for Microsoft Active Directory (Standard Edition), also known as AWS Microsoft AD (Standard Edition), which is a managed Microsoft Active Directory (AD) that is optimized for small and midsize businesses (SMBs). With this SDK release, you can now create an AWS Microsoft AD directory using API. This enables you to run typical SMB workloads using a cost-effective, highly available, and managed Microsoft AD in the AWS Cloud."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.11 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "KMS",
5
+ "description": "Documentation updates for AWS KMS"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.12 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Aws",
5
+ "description": "Fix misspelling class PresignUrlMiddleware."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ElasticLoadBalancing",
10
+ "description": "Added OperationNotPermittedException to indicate that you cannot create a classic load balancer while deleting the Elastic Load Balancing service-linked role."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "SSM",
15
+ "description": "Updates documentation for the HierarchyLevelLimitExceededException error."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ElasticLoadBalancingv2",
20
+ "description": "Added OperationNotPermittedException to indicate that you cannot create a load balancer while deleting the Elastic Load Balancing service-linked role."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "RDS",
25
+ "description": "Read Replicas for Amazon RDS for MySQL, MariaDB, and PostgreSQL now support Multi-AZ deployments.Amazon RDS Read Replicas enable you to create one or more read-only copies of your database instance within the same AWS Region or in a different AWS Region. Updates made to the source database are asynchronously copied to the Read Replicas. In addition to providing scalability for read-heavy workloads, you can choose to promote a Read Replica to become standalone a DB instance when needed.Amazon RDS Multi-AZ Deployments provide enhanced availability for database instances within a single AWS Region. With Multi-AZ, your data is synchronously replicated to a standby in a different Availability Zone (AZ). In case of an infrastructure failure, Amazon RDS performs an automatic failover to the standby, minimizing disruption to your applications.You can now combine Read Replicas with Multi-AZ as part of a disaster recovery strategy for your production databases. A well-designed and tested plan is critical for maintaining business continuity after a disaster. Since Read Replicas can also be created in different regions than the source database, your Read Replica can be promoted to become the new production database in case of a regional disruption.You can also combine Read Replicas with Multi-AZ for your database engine upgrade process. You can create a Read Replica of your production database instance and upgrade it to a new database engine version. When the upgrade is complete, you can stop applications, promote the Read Replica to a standalone database instance and switch over your applications. Since the database instance is already a Multi-AZ deployment, no additional steps are needed.For more information, see the Amazon RDS User Guide."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.13 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Glue",
5
+ "description": "Support is added to generate ETL scripts in Scala which can now be run by AWS Glue ETL jobs. In addition, the trigger API now supports firing when any conditions are met (in addition to all conditions). Also, jobs can be triggered based on a \"failed\" or \"stopped\" job run (in addition to a \"succeeded\" job run). "
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.14 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Lambda",
5
+ "description": "Support for creating Lambda Functions using 'dotnetcore2.0' and 'go1.x'. "
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.2 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "",
5
+ "description": "Add support for retrying exception code RequestThrottledException."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Route53",
10
+ "description": "Route 53 added support for a new China (Ningxia) region, cn-northwest-1. You can now specify cn-northwest-1 as the region for latency-based or geoproximity routing. Route 53 also added support for a new EU (Paris) region, eu-west-3. You can now associate VPCs in eu-west-3 with private hosted zones and create alias records that route traffic to resources in eu-west-3."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "MediaStoreData",
15
+ "description": "Documentation updates for mediastore"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "APIGateway",
20
+ "description": "API Gateway now adds support for calling API with compressed payloads using one of the supported content codings, tagging an API stage for cost allocation, and returning API keys from a custom authorizer for use with a usage plan."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "Update ResourceType enum with values for WAF, WAFRegional, and CloudFront resources"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CodeStar",
10
+ "description": "Launch AWS CodeStar in the Asia Pacific (Tokyo) and Canada (Central) regions. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "IoT",
15
+ "description": "This release adds support for code signed Over-the-air update functionality for Amazon FreeRTOS. Users can now create and schedule Over-the-air updates to their Amazon FreeRTOS devices using these new APIs. "
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.4 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "KinesisAnalytics",
5
+ "description": "Kinesis Analytics now supports AWS Lambda functions as output."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Elastic IP tagging enables you to add key and value metadata to your Elastic IPs so that you can search, filter, and organize them according to your organization's needs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CodeBuild",
15
+ "description": "Adding support allowing AWS CodeBuild customers to select specific curated image versions."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.5 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Test",
5
+ "description": "Use fluent interface when defining mocks."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Inspector",
10
+ "description": "PreviewAgents API now returns additional fields within the AgentPreview data type. The API now shows the agent health and availability status for all instances included in the assessment target. This allows users to check the health status of Inspector Agents before running an assessment. In addition, it shows the instance ID, hostname, and IP address of the targeted instances."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "This release fixes an issue with tags not showing in DescribeAddresses responses."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ECS",
20
+ "description": "Amazon ECS users can now set a health check initialization wait period of their ECS services, the services that are associated with an Elastic Load Balancer (ELB) will wait for a period of time before the ELB become healthy. You can now configure this in Create and Update Service."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SageMaker",
25
+ "description": "SageMaker Models no longer support SupplementalContainers. API's that have been affected are CreateModel and DescribeModel."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.6 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "",
5
+ "description": "Clean elses when have already returned something."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "",
10
+ "description": "Removed or adjusted unused imports."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "WorkSpaces",
15
+ "description": "Modify WorkSpaces have been updated with flexible storage and switching of hardware bundles feature. The following configurations have been added to ModifyWorkSpacesProperties: storage and compute. This update provides the capability to configure the storage of a WorkSpace. It also adds the capability of switching hardware bundle of a WorkSpace by specifying an eligible compute (Value, Standard, Performance, Power)."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.7 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Docs",
5
+ "description": "Clean up extra lines."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "RDS",
10
+ "description": "Documentation updates for rds"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.8 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Inspector",
5
+ "description": "Added 2 new attributes to the DescribeAssessmentTemplate response, indicating the total number of assessment runs and last assessment run ARN (if present.)"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Snowball",
10
+ "description": "Documentation updates for snowball"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "SSM",
15
+ "description": "Documentation updates for ssm"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.48.9 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ApplicationDiscoveryService",
5
+ "description": "Documentation updates for AWS Application Discovery Service."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodeDeploy",
10
+ "description": "The AWS CodeDeploy API was updated to support DeleteGitHubAccountToken, a new method that deletes a GitHub account connection."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Route53",
15
+ "description": "This release adds an exception to the CreateTrafficPolicyVersion API operation."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.49.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ApplicationAutoScaling",
5
+ "description": "Application Auto Scaling is adding support for Target Tracking Scaling for ECS services."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "RDS",
10
+ "description": "With this release you can now integrate RDS DB instances with CloudWatch Logs. We have added parameters to the operations for creating and modifying DB instances (for example CreateDBInstance) to allow you to take advantage of this capability through the CLI and API. Once you enable this feature, a stream of log events will publish to CloudWatch Logs for each log type you enable."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "WorkSpaces",
15
+ "description": "Amazon Workspaces is now available in sa-east-1"
16
+ },
17
+ {
18
+ "type": "feature",
19
+ "category": "AutoScalingPlans",
20
+ "description": "AWS Auto Scaling enables you to quickly discover all of the scalable resources underlying your application and set up application scaling in minutes using built-in scaling recommendations."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.49.1 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "AutoScalingPlans",
5
+ "description": "Documentation updates for autoscaling-plans"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "EC2",
10
+ "description": "Documentation updates for EC2"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.50.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Rds",
5
+ "description": "Fixes a bug where DestinationRegion was not being added to automatically generated PreSignedUrl parameters for RDS operations."
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "S3",
10
+ "description": "Updates the type of the S3 Size object to long (from integer) to properly reflect objects over PHP_INT_MAX in size. This will affect ListObjects, ListObjectsV2, ListObjectVersions, and ListParts. This bug fix may be a breaking change for customers who relied on the previously PHP_INT_MAX capped behavior or on the type of the field. You may see objects at their full size, as a string, if they are over PHP_INT_MAX in size."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "CreateTrainingJob and CreateEndpointConfig now supports KMS Key for volume encryption. "
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.51.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Credentials",
5
+ "description": "Add support for an AWS_EC2_METADATA_DISABLED environment variable to short-circuit requests for credentials via the InstanceProfileProvider."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Glue",
10
+ "description": "New AWS Glue DataCatalog APIs to manage table versions and a new feature to skip archiving of the old table version when updating table."
11
+ },
12
+ {
13
+ "type": "feature",
14
+ "category": "TranscribeService",
15
+ "description": "Amazon Transcribe Public Preview Release"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "",
5
+ "description": "Retry on a set of CURLE_*_ERROR based failures. Currently, only CURLE_RECV_ERROR (errno 56) is retried."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Api\\Parser",
10
+ "description": "Simplify return."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Budgets",
15
+ "description": "Add additional costTypes: IncludeDiscount, UseAmortized, to support finer control for different charges included in a cost budget."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.1 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeBuild",
5
+ "description": "Adding support for Shallow Clone and GitHub Enterprise in AWS CodeBuild."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CloudHsm",
10
+ "description": "Added service signing name."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "Appstream",
15
+ "description": "This API update is to support Amazon AppStream 2.0's launch into the Asia Pacific (Singapore) and Asia Pacific (Sydney) regions."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Lambda",
20
+ "description": "AWS Lambda now supports Revision ID on your function versions and aliases, to track and apply conditional updates when you are updating your function version or alias resources."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "GuardDuty",
25
+ "description": "Added the missing AccessKeyDetails object to the resource shape."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "AlexaForBusiness",
30
+ "description": "Supports new field for DeviceStatusInfo which provides details about the DeviceStatus following a DeviceSync operation."
31
+ },
32
+ {
33
+ "type": "bugfix",
34
+ "category": "RetryMiddleware",
35
+ "description": "Verify we have the curl extension before retrying on the CURLE_RECV_ERROR curl const."
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.10 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CodeStar",
5
+ "description": "Launch AWS CodeStar in the Asia Pacific Northeast 2 (ICN) region."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaConvert",
10
+ "description": "Nielsen ID3 tags can now be inserted into transport stream (TS) and HLS outputs. For more information on Nielsen configuration you can go to https:\/\/docs.aws.amazon.com\/mediaconvert\/latest\/apireference\/jobs.html#jobs-nielsenconfiguration"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GameLift",
15
+ "description": "Updates to allow Fleets to run on On-Demand or Spot instances."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.11 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "Updates RDS API to indicate whether a DBEngine supports read replicas."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.12 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "With this release, AWS Config updated the ConfigurationItemStatus enum values. The values prior to this update did not represent appropriate values returned by GetResourceConfigHistory. You must update your code to enumerate the new enum values so this is a breaking change. To map old properties to new properties, use the following descriptions: New discovered resource - Old property: Discovered, New property: ResourceDiscovered. Updated resource - Old property: Ok, New property: OK. Deleted resource - Old property: Deleted, New property: ResourceDeleted or ResourceDeletedNotRecorded. Not-recorded resource - Old property: N\/A, New property: ResourceNotRecorded or ResourceDeletedNotRecorded."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.13 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "WAF",
5
+ "description": "The new PermissionPolicy APIs in AWS WAF Regional allow customers to attach resource-based policies to their entities."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "WAFRegional",
10
+ "description": "The new PermissionPolicy APIs in AWS WAF Regional allow customers to attach resource-based policies to their entities."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AutoScaling",
15
+ "description": "Amazon EC2 Auto Scaling support for service-linked roles"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.14 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Adds support for tagging an EBS snapshot as part of the API call that creates the EBS snapshot"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "MediaPackage",
10
+ "description": "Mediapackage expands their service to FRA and CDG regions."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ServerlessApplicationRepository",
15
+ "description": "Added support for delete-application API and the ability for developers to set a homepage for their application. The homepage is a URL with more information about the application, for example the location of your GitHub repository for the application. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CodeCommit",
20
+ "description": "This release adds an API for adding a file directly to an AWS CodeCommit repository without requiring a Git client."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.15 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ElasticLoadBalancingv2",
5
+ "description": "Added a new load balancer attribute related to Network Load Balancers that enables cross zone capabilities. This feature allows Network Load Balancers to distribute requests regardless of Availability Zone."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CostExplorer",
10
+ "description": "Added GetReservationCoverage API for retrieving reservation coverage information."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.16 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppStream",
5
+ "description": "This API update is to enable customers to copy their Amazon AppStream 2.0 images within and between AWS Regions"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.17 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "STS",
5
+ "description": "Increased SAMLAssertion parameter size from 50000 to 100000 for AWS Security Token Service AssumeRoleWithSAML API to allow customers to pass bigger SAML assertions"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Route53",
10
+ "description": "Added support for creating LBR rules using ap-northeast-3 region."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.18 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ECR",
5
+ "description": "Documentation updates for Amazon ECR."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.19 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "CloudFront",
5
+ "description": "Updates the `Signer` to force expire timestamps to match CloudFront required unquoted integers."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ApplicationAutoScaling",
10
+ "description": "Application Auto Scaling now supports automatic scaling of SageMaker Production Variants on an Endpoint."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "MTurk",
5
+ "description": "Documentation updates for mturk-requester"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaLive",
10
+ "description": "Add InputSpecification to CreateChannel (specification of input attributes is used for channel sizing and affects pricing); add NotFoundException to DeleteInputSecurityGroups."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "DeviceFarm",
15
+ "description": "Add InteractionMode in CreateRemoteAccessSession for DirectDeviceAccess feature."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.20 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "StorageGateway",
5
+ "description": "AWS Storage Gateway (File) support for two new file share attributes are added. 1. Users can specify the S3 Canned ACL to use for new objects created in the file share. 2. Users can create file shares for requester-pays buckets."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SSM",
10
+ "description": "This Inventory release supports the status message details reported by the last sync for the resource data sync API."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "EC2",
15
+ "description": "Added support for modifying Placement Group association of instances via ModifyInstancePlacement API."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudWatchEvents",
20
+ "description": "Added BatchParameters to the PutTargets API"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ServiceCatalog",
25
+ "description": "This release of ServiceCatalog adds the DeleteTagOption API."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.21 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "RetryMiddleware",
5
+ "description": "Retries CURLE_RECV_ERROR on all RequestException, not just ConnectException."
6
+ },
7
+ {
8
+ "type": "bugfix",
9
+ "category": "RetryMiddleware",
10
+ "description": "Fixes an undefined index issue."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ECS",
15
+ "description": "Documentation updates for Amazon ECS"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.22 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "bugfix",
4
+ "category": "S3\/S3SignatureV4",
5
+ "description": "Fixes an issue that would strip a preceding slash from a key during the signing process on virtual host style pathing, resulting in an invalid signature."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaLive",
10
+ "description": "Updates API to model required traits and minimum\/maximum constraints."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.23 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "Amazon Elastic Container Service (ECS) now supports container health checks. Customers can now specify a docker container health check command and parameters in their task definition. ECS will monitor, report and take scheduling action based on the health status."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MigrationHub",
10
+ "description": "Unused key LABEL removed from ResourceAttrbute"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Pinpoint",
15
+ "description": "With this release, you can export endpoints from your Amazon Pinpoint projects. You can export a) all of the endpoints assigned to a project or b) the subset of endpoints assigned to a segment."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "RDS",
20
+ "description": "Documentation updates for RDS"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.24 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IoT",
5
+ "description": "We added new fields to the response of the following APIs. (1) describe-certificate: added new generationId, customerVersion fields (2) describe-ca-certificate: added new generationId, customerVersion and lastModifiedDate fields (3) get-policy: added generationId, creationDate and lastModifiedDate fields"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudHSMV2",
10
+ "description": "CreateCluster can now take both 8 and 17 character Subnet IDs. DeleteHsm can now take both 8 and 17 character ENI IDs."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ApplicationDiscoveryService",
15
+ "description": "Documentation updates for discovery"
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Redshift",
20
+ "description": "DescribeClusterSnapshotsMessage with ClusterExists flag returns snapshots of existing clusters. Else both existing and deleted cluster snapshots are returned"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.25 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServiceDiscovery",
5
+ "description": "This release adds support for custom health checks, which let you check the health of resources that aren't accessible over the internet. For example, you can use a custom health check when the instance is in an Amazon VPC."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.26 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Lightsail",
5
+ "description": "Updates to existing Lightsail documentation"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.27 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Pinpoint",
5
+ "description": "With this release, you can delete endpoints from your Amazon Pinpoint projects. Customers can now specify one of their leased dedicated long or short codes to send text messages."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Organizations",
10
+ "description": "This release adds additional reason codes to improve clarity to exceptions that can occur."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SageMaker",
15
+ "description": "This release provides support for ml.p3.xlarge instance types for notebook instances. Lifecycle configuration is now available to customize your notebook instances on start; the configuration can be reused between multiple notebooks. If a notebook instance is attached to a VPC you can now opt out of internet access that by default is provided by SageMaker."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.28 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElasticBeanstalk",
5
+ "description": "AWS Elastic Beanstalk is launching a new public API named DescribeAccountAttributes which allows customers to access account level attributes. In this release, the API will support quotas for resources such as applications, application versions, and environments."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.29 ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "ElasticBeanstalk",
5
+ "description": "Documentation updates for the new Elastic Beanstalk API DescribeAccountAttributes."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Glue",
10
+ "description": "API Updates for DevEndpoint: PublicKey is now optional for CreateDevEndpoint. The new DevEndpoint field PrivateAddress will be populated for DevEndpoints associated with a VPC."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ECS",
15
+ "description": "Amazon ECS users can now mount a temporary volume in memory in containers and specify the shared memory that a container can use through the use of docker's 'tmpfs' and 'shm-size' features respectively. These fields can be specified under linuxParameters in ContainerDefinition in the Task Definition Template."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CostExplorer",
20
+ "description": "This launch will allow customers to access their Amazon EC2 Reserved Instance (RI) purchase recommendations programmatically via the AWS Cost Explorer API. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ConfigService",
25
+ "description": "AWS Config adds support for BatchGetResourceConfig API, allowing you to batch-retrieve the current state of one or more of your resources."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "MediaLive",
30
+ "description": "AWS Elemental MediaLive has added support for updating Inputs and Input Security Groups. You can update Input Security Groups at any time and it will update all channels using that Input Security Group. Inputs can be updated as long as they are not attached to a currently running channel."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "CloudWatchEvents",
35
+ "description": "Added SQS FIFO queue target support"
36
+ }
37
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.3 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Cloud9",
5
+ "description": "API usage examples for AWS Cloud9."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "OpsWorks",
10
+ "description": "AWS OpsWorks Stacks supports EBS encryption and HDD volume types. Also, a new DescribeOperatingSystems API is available, which lists all operating systems supported by OpsWorks Stacks."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Kinesis",
15
+ "description": "Using ListShards a Kinesis Data Streams customer or client can get information about shards in a data stream (including meta-data for each shard) without obtaining data stream level information."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "ACM",
20
+ "description": "Documentation updates for acm"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.30 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "MediaPackage",
5
+ "description": "Elemental MediaPackage is now available in the ICN and GRU regions."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "ServerlessApplicationRepository",
10
+ "description": "Documentation updates for Serverless Application Respository"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.31 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CodeBuild",
5
+ "description": "Adding support for branch filtering when using webhooks with AWS CodeBuild. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ECS",
10
+ "description": "Amazon Elastic Container Service (ECS) now includes integrated Service Discovery using Route 53 Auto Naming. Customers can now specify a Route 53 Auto Naming service as part of an ECS service. ECS will register task IPs with Route 53, making them available via DNS in your VPC."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AppStream",
15
+ "description": "Feedback URL allows admins to provide a feedback link or a survey link for collecting user feedback while streaming sessions. When a feedback link is provided, streaming users will see a \"Send Feedback\" choice in their streaming session toolbar. On selecting this choice, user will be redirected to the link provided in a new browser tab. If a feedback link is not provided, users will not see the \"Send Feedback\" option. "
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.32 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "RDS",
5
+ "description": "Documentation updates for RDS"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.33 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DynamoDB",
5
+ "description": "Point-in-time recovery (PITR) provides continuous backups of your DynamoDB table data. With PITR, you do not have to worry about creating, maintaining, or scheduling backups. You enable PITR on your table and your backup is available for restore at any point in time from the moment you enable it, up to a maximum of the 35 preceding days. PITR provides continuous backups until you explicitly disable it. For more information, see the Amazon DynamoDB Developer Guide."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.34 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ACM",
5
+ "description": "AWS Certificate Manager has added support for customers to disable Certificate Transparency logging on a per-certificate basis."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.35 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "GuardDuty",
5
+ "description": "Amazon GuardDuty API operations are now supported in the EU (Paris) region."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "IAM",
10
+ "description": "Add support for Longer Role Sessions. Four APIs manage max session duration: GetRole, ListRoles, CreateRole, and the new API UpdateRole. The max session duration integer attribute is measured in seconds."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "STS",
15
+ "description": "Change utilizes the Max Session Duration attribute introduced for IAM Roles and allows STS customers to request session duration up to the Max Session Duration of 12 hours from AssumeRole based APIs."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "WorkSpaces",
20
+ "description": "Amazon Workspaces is now available in ap-northeast-2"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MTurk",
25
+ "description": "Added a new attribute \"ActionsGuarded\" to QualificationRequirement: This update allows MTurk Requester customers using the AWS SDK to control which Workers can see and preview their HITs. We now support hiding HITs from unqualified Workers' search results."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.36 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "This Patch Manager release supports creating patch baselines for CentOS."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudFormation",
10
+ "description": "Enabling resource level permission control for StackSets APIs. Adding support for customers to use customized AdministrationRole to create security boundaries between different users."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AlexaForBusiness",
15
+ "description": "Adds operations for creating and managing address books of phone contacts for use in A4B managed shared devices."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Greengrass",
20
+ "description": "Greengrass APIs now support creating Machine Learning resource types and configuring binary data as the input payload for Greengrass Lambda functions."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.4 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "This Patch Manager release supports configuring Linux repos as part of patch baselines, controlling updates of non-OS security packages and also creating patch baselines for SUSE12"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "ServiceDiscovery",
10
+ "description": "This release adds support for registering CNAME record types and creating Route 53 alias records that route traffic to Amazon Elastic Load Balancers using Amazon Route 53 Auto Naming APIs."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Glue",
15
+ "description": "This new feature will now allow customers to add a customized json classifier. They can specify a json path to indicate the object, array or field of the json documents they'd like crawlers to inspect when they crawl json files. "
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "ServiceCatalog",
20
+ "description": "This release of Service Catalog adds SearchProvisionedProducts API and ProvisionedProductPlan APIs."
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.5 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "DynamoDB",
5
+ "description": "Amazon DynamoDB now supports server-side encryption using a default service key (alias\/aws\/dynamodb) from the AWS Key Management Service (KMS). AWS KMS is a service that combines secure, highly available hardware and software to provide a key management system scaled for the cloud. AWS KMS is used via the AWS Management Console or APIs to centrally create encryption keys, define the policies that control how keys can be used, and audit key usage to prove they are being used correctly. For more information, see the Amazon DynamoDB Developer Guide."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Inspector",
10
+ "description": "We marked Inspector GA yesterday. 2\/.5\/18."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GameLift",
15
+ "description": "Amazon GameLift FlexMatch added the StartMatchBackfill API. This API allows developers to add new players to an existing game session using the same matchmaking rules and player data that were used to initially create the session."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Budgets",
20
+ "description": "Making budgetLimit and timePeriod optional, and updating budgets docs. "
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "MediaStore",
25
+ "description": "AWS Elemental MediaStore now supports per-container CORS configuration."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "DirectoryService",
30
+ "description": "Updated the regex of some input parameters to support longer EC2 identifiers."
31
+ },
32
+ {
33
+ "type": "api-change",
34
+ "category": "AppStream",
35
+ "description": "Adds support for allowing customers to provide a redirect URL for a stack. Users will be redirected to the link provided by the admin at the end of their streaming session. "
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "DatabaseMigrationService",
40
+ "description": "This release includes the addition of two new APIs: describe replication instance task logs and reboot instance. The first allows user to see how much storage each log for a task on a given instance is occupying. The second gives users the option to reboot the application software on the instance and force a fail over for MAZ instances to test robustness of their integration with our service. "
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "MediaLive",
45
+ "description": "AWS Elemental MediaLive has added support for updating channel settings for idle channels. You can now update channel name, channel outputs and output destinations, encoder settings, user role ARN, and input specifications. Channel settings can be updated in the console or with API calls. Please note that running channels need to be stopped before they can be updated. We've also deprecated the 'Reserved' field."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.6 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Users can now better understand the longer ID opt-in status of their account using the two new APIs DescribeAggregateIdFormat and DescribePrincipalIdFormat"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "LexRuntimeService",
10
+ "description": "You can now define a response for your Amazon Lex chatbot directly from the AWS console. A response consists of messages dynamically selected from a group of pre-defined messages, populated by the developer."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "LexModelBuildingService",
15
+ "description": "You can now define a response for your Amazon Lex chatbot directly from the AWS console. A response consists of messages dynamically selected from a group of pre-defined messages, populated by the developer."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.7 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "KMS",
5
+ "description": "This release of AWS Key Management Service includes support for InvalidArnException in the RetireGrant API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "Network interfaces now supply the following additional status of \"associated\" to better distinguish the current status."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "GuardDuty",
15
+ "description": "Added PortProbeAction information to the Action section of the port probe-type finding."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "RDS",
20
+ "description": "Aurora MySQL now supports MySQL 5.7."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CognitoIdentityProvider",
25
+ "description": "Support for user migration using AWS Lambda trigger. Support to obtain signing certificate for user pools."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.8 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Glacier",
5
+ "description": "Documentation updates for glacier"
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Route53",
10
+ "description": "Added support for creating Private Hosted Zones and metric-based healthchecks in the ap-northeast-3 region for whitelisted customers."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.52.9 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AppSync",
5
+ "description": "AWS AppSync now supports for None Data Source, CreateApiKey now supports setting expiration on API keys, new API UpdateApiKey supports updating expiration on API keys. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "LexModelBuildingService",
10
+ "description": "Amazon Lex now provides the ability to export and import your Amazon Lex chatbot definition as a JSON file."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.53.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "Connect",
5
+ "description": "Amazon Connect is a contact center as a service (CCaS) solution that offers easy, self-service configuration and enables dynamic, personal, and natural customer engagement at any scale. With this release of the Amazon Connect SDK, Outbound APIs (StartOutboundVoiceContact, StopContact) are now generally available. This release supports CTR generation for calls generated through the new APIs. Additionally IAM permissions are supported for the new APIs. "
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "CodeBuild",
10
+ "description": "Adding FIPS endpoint for CodeBuild service"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "ACM",
15
+ "description": "Documentation updates for acm"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.53.1 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "APIGateway",
5
+ "description": "Amazon API Gateway now supports resource policies for APIs making it easier to set access controls for invoking APIs."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CloudFront",
10
+ "description": "You can now use a new Amazon CloudFront capability called Field-Level Encryption to further enhance the security of sensitive data, such as credit card numbers or personally identifiable information (PII) like social security numbers. CloudFront's field-level encryption further encrypts sensitive data in an HTTPS form using field-specific encryption keys (which you supply) before a POST request is forwarded to your origin. This ensures that sensitive data can only be decrypted and viewed by certain components or services in your application stack. Field-level encryption is easy to setup. Simply configure the fields that have to be further encrypted by CloudFront using the public keys you specify and you can reduce attack surface for your sensitive data."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticsearchService",
15
+ "description": "This adds Amazon Cognito authentication support to Kibana."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.53.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Translate",
5
+ "description": "This release increases the maximum size of input text to 5,000 bytes. Amazon Translate now supports automatic language detection of the input text. The translation models have been improved to increase accuracy. See the documentation for more information."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DeviceFarm",
10
+ "description": "Added Private Device Management feature. Customers can now manage their private devices efficiently - view their status, set labels and apply profiles on them. Customers can also schedule automated tests and remote access sessions on individual instances in their private device fleet."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "Lambda",
15
+ "description": "added nodejs8.10 as a valid runtime"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.54.0 ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "TranscribeService",
5
+ "description": "Amazon Transcribe is an automatic speech recognition (ASR) service that makes it easy for developers to add speech to text capability to their applications. "
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "S3",
10
+ "description": "ONEZONE_IA storage class stores object data in only one Availability Zone at a lower price than STANDARD_IA. This SDK release provides API support for this new storage class."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ConfigService",
15
+ "description": "AWS Config introduces multi-account multi-region data aggregation features. Customers can create an aggregator (a new resource type) in AWS Config that collects AWS Config data from multiple source accounts and regions into an aggregator account. Customers can aggregate data from individual account(s) or an organization and multiple regions. In this release, AWS Config adds several API's for multi-account multi-region data aggregation."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "CloudWatch",
20
+ "description": "The new GetMetricData API enables you to collect batch amounts of metric data and optionally perform math expressions on the data. With one GetMetricData call you can retrieve as many as 100 different metrics and a total of 100,800 data points."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "SageMaker",
25
+ "description": "SageMaker is now supporting many additional instance types in previously supported families for Notebooks, Training Jobs, and Endpoints. Training Jobs and Endpoints now support instances in the m5 family in addition to the previously supported instance families. For specific instance types supported please see the documentation for the SageMaker API."
26
+ },
27
+ {
28
+ "type": "feature",
29
+ "category": "FMS",
30
+ "description": "This release is the initial release version for AWS Firewall Manager, a new AWS service that makes it easy for customers to centrally configure WAF rules across all their resources (ALBs and CloudFront distributions) and across accounts."
31
+ },
32
+ {
33
+ "type": "feature",
34
+ "category": "SecretsManager",
35
+ "description": "AWS Secrets Manager enables you to easily create and manage the secrets that you use in your customer-facing apps. Instead of embedding credentials into your source code, you can dynamically query Secrets Manager from your app whenever you need credentials. You can automatically and frequently rotate your secrets without having to deploy updates to your apps. All secret values are encrypted when they're at rest with AWS KMS, and while they're in transit with HTTPS and TLS."
36
+ },
37
+ {
38
+ "type": "feature",
39
+ "category": "ACMPCA",
40
+ "description": "AWS Certificate Manager (ACM) Private Certificate Authority (CA) is a managed private CA service that helps you easily and securely manage the lifecycle of your private certificates. ACM Private CA provides you a highly-available private CA service without the upfront investment and ongoing maintenance costs of operating your own private CA. ACM Private CA extends ACM's certificate management capabilities to private certificates, enabling you to manage public and private certificates centrally."
41
+ },
42
+ {
43
+ "type": "api-change",
44
+ "category": "ACM",
45
+ "description": "AWS Certificate Manager has added support for AWS Certificate Manager Private Certificate Authority (CA). Customers can now request private certificates with the RequestCertificate API, and also export private certificates with the ExportCertificate API."
46
+ }
47
+ ]
vendor/aws/aws-sdk-php/.changes/3.54.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "SSM",
5
+ "description": "Documentation updates for ec2"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.54.2 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Batch",
5
+ "description": "Support for Timeout in SubmitJob and RegisterJobDefinition"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.54.3 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudDirectory",
5
+ "description": "Cloud Directory customers can fetch attributes within a facet on an object with the new GetObjectAttributes API and can fetch attributes from multiple facets or objects with the BatchGetObjectAttributes operation."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.54.4 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "MediaPackage",
5
+ "description": "Adds a new OriginEndpoint package type CmafPackage in MediaPackage. Origin endpoints can now be configured to use the Common Media Application Format (CMAF) media streaming format. This version of CmafPackage only supports HTTP Live Streaming (HLS) manifests with fragmented MP4."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "DatabaseMigrationService",
10
+ "description": "Native Change Data Capture start point and task recovery support in Database Migration Service. "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "WorkMail",
15
+ "description": "Amazon WorkMail adds the ability to grant users and groups with \"Full Access\", \"Send As\" and \"Send on Behalf\" permissions on a given mailbox."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "SSM",
20
+ "description": "Added TooManyUpdates exception for AddTagsToResource and RemoveTagsFromResource API"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Glue",
25
+ "description": "\"AWS Glue now supports timeout values for ETL jobs. With this release, all new ETL jobs have a default timeout value of 48 hours. AWS Glue also now supports the ability to start a schedule or job events trigger when it is created.\""
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.54.5 ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "SSM",
5
+ "description": "Added new APIs DeleteInventory and DescribeInventoryDeletions, for customers to delete their custom inventory data."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "SecretsManager",
10
+ "description": "Documentation updates"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "RDS",
15
+ "description": "The ModifyDBCluster operation now includes an EngineVersion parameter. You can use this to upgrade the engine for a clustered database."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DeviceFarm",
20
+ "description": "Adding support for VPCEndpoint feature. Allows customers to be able to access their private endpoints\/services running in their VPC during test automation."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "CostExplorer",
25
+ "description": "Starting today, you can identify opportunities for Amazon RDS cost savings using AWS Cost Explorer's API to access your Amazon RDS Reserved Instance Purchase Recommendations"
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "CodePipeline",
30
+ "description": "Added new SourceRevision structure to Execution Summary with accompanying definitions as needed in the AWS CodePipeline API Guide."
31
+ },
32
+ {
33
+ "type": "enhancement",
34
+ "category": "CloudHSMV2",
35
+ "description": "The new CloudHSM is now available in the AWS GovCloud (US)."
36
+ },
37
+ {
38
+ "type": "api-change",
39
+ "category": "EC2",
40
+ "description": "Added support for customers to see the time at which a Dedicated Host was allocated or released."
41
+ }
42
+ ]
vendor/aws/aws-sdk-php/.changes/3.54.6 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Firehose",
5
+ "description": "With this release, Amazon Kinesis Data Firehose allows you to tag your delivery streams. Tags are metadata that you can create and use to manage your delivery streams. For more information about tagging, see AWS Tagging Strategies. For technical documentation, look for the tagging operations in the Amazon Kinesis Firehose API reference."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "MediaLive",
10
+ "description": "With AWS Elemental MediaLive you can now output live channels as RTMP (Real-Time Messaging Protocol) and RTMPS as the encrypted version of the protocol (Secure, over SSL\/TLS). RTMP is the preferred protocol for sending live streams to popular social platforms which means you can send live channel content to social and sharing platforms in a secure and reliable way while continuing to stream to your own website, app or network."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.0 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "IoTAnalytics",
5
+ "description": "Introducing AWS IoT Analytics SDK. AWS IoT Analytics provides advanced data analysis for AWS IoT. It allows you to collect large amounts of device data, process messages, store them, and then query the data and run sophisticated analytics to make accurate decisions in your IoT applications and machine learning use cases. AWS IoT Analytics enables advanced data exploration through integration with Jupyter Notebooks and data visualization through integration with Amazon QuickSight."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AutoScalingPlans",
10
+ "description": "The release adds the operation UpdateScalingPlan for updating a scaling plan and the support for tag filters as an application source."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "IoT",
15
+ "description": "Add IotAnalyticsAction which sends message data to an AWS IoT Analytics channel"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.1 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "",
5
+ "description": "Fixes docblock @param tags to reference Result class with a consistent case"
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "SecretsManager",
10
+ "description": "Documentation updates for secretsmanager"
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "ElasticBeanstalk",
15
+ "description": "Support tracking Elastic Beanstalk resources in AWS Config."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.10 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "RDS",
5
+ "description": "Changes to support the Aurora MySQL Backtrack feature."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "Budgets",
10
+ "description": "Updating the regex for the NumericValue fields."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "IotDataPlane",
15
+ "description": "With this release, we're adding support for ap-south-1 AWS region."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "EC2",
20
+ "description": "Enable support for latest flag with Get Console Output"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.11 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GameLift",
5
+ "description": "AutoScaling Target Tracking scaling simplification along with StartFleetActions and StopFleetActions APIs to suspend and resume automatic scaling at will."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.12 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "Firehose",
5
+ "description": "With this release, Amazon Kinesis Data Firehose can convert the format of your input data from JSON to Apache Parquet or Apache ORC before storing the data in Amazon S3. Parquet and ORC are columnar data formats that save space and enable faster queries compared to row-oriented formats like JSON."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.2 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "XRay",
5
+ "description": "Added PutEncryptionConfig and GetEncryptionConfig APIs for managing data encryption settings. Use PutEncryptionConfig to configure X-Ray to use an AWS Key Management Service customer master key to encrypt trace data at rest."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Rekognition",
10
+ "description": "Documentation updates for Amazon Rekognition."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CodeDeploy",
15
+ "description": "AWS CodeDeploy has a new exception that indicates when a GitHub token is not valid."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "CodeCommit",
5
+ "description": "AWS CodeCommit is now available in an additional region, EU (Paris)."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Glacier",
10
+ "description": "Documentation updates for Glacier to fix a broken link"
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "SecretsManager",
15
+ "description": "Documentation updates for secretsmanager"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.4 ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "AlexaForBusiness",
5
+ "description": "Adds ListDeviceEvents API to get a paginated list of device events (such as ConnectionStatus). This release also adds ConnectionStatus field to GetDevice and SearchDevices API."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "SageMaker",
10
+ "description": "SageMaker has added support for VPC configuration for both Endpoints and Training Jobs. This allows you to connect from the instances running the Endpoint or Training Job to your VPC and any resources reachable in the VPC rather than being restricted to resources that were internet accessible."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "WorkSpaces",
15
+ "description": "Added new IP Access Control APIs, an API to change the state of a Workspace, and the ADMIN_MAINTENANCE WorkSpace state. With the new IP Access Control APIs, you can now create\/delete IP Access Control Groups, add\/delete\/update rules for IP Access Control Groups, Associate\/Disassociate IP Access Control Groups to\/from a WorkSpaces Directory, and Describe IP Based Access Control Groups."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "DynamoDB",
20
+ "description": "Adds two new APIs UpdateGlobalTableSettings and DescribeGlobalTableSettings. This update introduces new constraints in the CreateGlobalTable and UpdateGlobalTable APIs . Tables must have the same write capacity units. If Global Secondary Indexes exist then they must have the same write capacity units and key schema."
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "Route53Domains",
25
+ "description": "This release adds a SubmittedSince attribute to the ListOperations API, so you can list operations that were submitted after a specified date and time."
26
+ },
27
+ {
28
+ "type": "api-change",
29
+ "category": "GuardDuty",
30
+ "description": "You can disable the email notification when inviting GuardDuty members using the disableEmailNotification parameter in the InviteMembers operation."
31
+ }
32
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.5 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Amazon EC2 Fleet is a new feature that simplifies the provisioning of Amazon EC2 capacity across different EC2 instance types, Availability Zones, and the On-Demand, Reserved Instance, and Spot Instance purchase models. With a single API call, you can now provision capacity to achieve desired scale, performance, and cost."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "CodePipeline",
10
+ "description": "Added support for webhooks with accompanying definitions as needed in the AWS CodePipeline API Guide."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "SSM",
15
+ "description": "Added support for new parameter, DocumentVersion, for SendCommand API. Users can now specify version of SSM document to be executed on the target(s)."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "ACM",
20
+ "description": "Documentation updates for acm"
21
+ },
22
+ {
23
+ "type": "enhancement",
24
+ "category": "Test\\Integ",
25
+ "description": "Adds the ability for Integ\/Smoke tests to check status codes. Updates ECS Handling errors to use a status code check."
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.6 ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "enhancement",
4
+ "category": "Test\\Build\\Changelog",
5
+ "description": "Add tests to validate location, naming, and JSON compilability of ChangelogDocuments."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "AppSync",
10
+ "description": "This release adds support for authorizing your AWS AppSync endpoint with an OpenID Connect compliant service and also to configure your AWS AppSync endpoint to log requests to Amazon CloudWatch Logs."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "SecretsManager",
15
+ "description": "Documentation updates for secretsmanager"
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "WorkSpaces",
20
+ "description": "Amazon WorkSpaces is now available in ca-central-1"
21
+ },
22
+ {
23
+ "type": "api-change",
24
+ "category": "ConfigService",
25
+ "description": "Update ResourceType enum with values for Lambda, ElasticBeanstalk, WAF and ElasticLoadBalancing resources"
26
+ }
27
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.7 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "GuardDuty",
5
+ "description": "Amazon GuardDuty is adding five new API operations for creating and managing filters. For each filter, you can specify a criteria and an action. The action you specify is applied to findings that match the specified criteria."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.8 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ElasticsearchService",
5
+ "description": "This change brings support for Reserved Instances to AWS Elasticsearch."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "S3",
10
+ "description": "Added BytesReturned details for Progress and Stats Events for Amazon S3 Select . "
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "AlexaForBusiness",
15
+ "description": "This release adds the new Device status \"DEREGISTERED\". This release also adds DEVICE_STATUS as the new DeviceEventType."
16
+ },
17
+ {
18
+ "type": "api-change",
19
+ "category": "Budgets",
20
+ "description": "\"With this release, customers can use AWS Budgets to monitor how much of their Amazon EC2, Amazon RDS, Amazon Redshift, and Amazon ElastiCache instance usage is covered by reservations, and receive alerts when their coverage falls below the threshold they define.\""
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.55.9 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "EC2",
5
+ "description": "Enable support for specifying CPU options during instance launch."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "Lightsail",
10
+ "description": "Lightsail is now available in regions eu-west-3, ap-northeast-2 and ca-central-1. "
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "RDS",
15
+ "description": "Correction to the documentation about copying unencrypted snapshots."
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.56.0 ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "feature",
4
+ "category": "IoT1ClickDevicesService",
5
+ "description": "AWS IoT 1-Click makes it easy for customers to incorporate simple ready-to-use IoT devices into their workflows. These devices can trigger AWS Lambda functions that implement business logic. In order to build applications using AWS IoT 1-Click devices, programmers can use the AWS IoT 1-Click Devices API and the AWS IoT 1-Click Projects API. Learn more at https:\/\/aws.amazon.com\/documentation\/iot-1-click\/"
6
+ },
7
+ {
8
+ "type": "feature",
9
+ "category": "IoT1ClickProjects",
10
+ "description": "AWS IoT 1-Click makes it easy for customers to incorporate simple ready-to-use IoT devices into their workflows. These devices can trigger AWS Lambda functions that implement business logic. In order to build applications using AWS IoT 1-Click devices, programmers can use the AWS IoT 1-Click Devices API and the AWS IoT 1-Click Projects API. Learn more at https:\/\/aws.amazon.com\/documentation\/iot-1-click\/."
11
+ },
12
+ {
13
+ "type": "api-change",
14
+ "category": "CodeBuild",
15
+ "description": "Adding support for more override fields for StartBuild API, add support for idempotency token field for StartBuild API in AWS CodeBuild."
16
+ },
17
+ {
18
+ "type": "enhancement",
19
+ "category": "Organizations",
20
+ "description": "Documentation updates for organizations"
21
+ }
22
+ ]
vendor/aws/aws-sdk-php/.changes/3.56.1 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ConfigService",
5
+ "description": "Update ResourceType enum with values for XRay resource"
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.56.2 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ServiceCatalog",
5
+ "description": "Users can now pass a new option to ListAcceptedPortfolioShares called portfolio-share-type with a value of AWS_SERVICECATALOG in order to access Getting Started Portfolios that contain selected products representing common customer use cases."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "SecretsManager",
10
+ "description": "Documentation updates for secretsmanager"
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.56.3 ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CognitoIdentityProvider",
5
+ "description": "Amazon Cognito User Pools now supports federation for users to sign up and sign in with any identity provider following the OpenID Connect standard. Amazon Cognito User Pools now returns the User Pool's Amazon Resource Name (ARN) from the CreateUserPool, UpdateUserPool, and DescribeUserPool APIs."
6
+ },
7
+ {
8
+ "type": "api-change",
9
+ "category": "EC2",
10
+ "description": "You are now able to use instance storage (up to 1800 GB of NVMe based SSD) on C5 instances, the next generation of EC2's compute optimized instances in us-east-1, us-west-2, us-east-2, eu-west-1 and ca-central-1. C5 instances offer up to 72 vCPUs, 144 GiB of DDR4 instance memory, 25 Gbps in Network bandwidth and improved EBS and Networking bandwidth on smaller instance sizes to deliver improved performance for compute-intensive workloads.You can now run bare metal workloads on EC2 with i3.metal instances. As a new instance size belonging to the I3 instance family, i3.metal instances have the same characteristics as other instances in the family, including NVMe SSD-backed instance storage optimized for low latency, very high random I\/O performance, and high sequential read throughput. I3.metal instances are powered by 2.3 GHz Intel Xeon processors, offering 36 hyper-threaded cores (72 logical processors), 512 GiB of memory, and 15.2 TB of NVMe SSD-backed instance storage. These instances deliver high networking throughput and lower latency with up to 25 Gbps of aggregate network bandwidth using Elastic Network Adapter (ENA)-based Enhanced Networking."
11
+ },
12
+ {
13
+ "type": "enhancement",
14
+ "category": "CodeDeploy",
15
+ "description": "Documentation updates for codedeploy"
16
+ }
17
+ ]
vendor/aws/aws-sdk-php/.changes/3.56.4 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "IoT",
5
+ "description": "We are releasing DeleteJob and DeleteJobExecution APIs to allow customer to delete resources created using AWS IoT Jobs."
6
+ },
7
+ {
8
+ "type": "enhancement",
9
+ "category": "SES",
10
+ "description": "Fixed a broken link in the documentation for S3Action."
11
+ }
12
+ ]
vendor/aws/aws-sdk-php/.changes/3.56.5 ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "CloudFormation",
5
+ "description": "1) Filtered Update for StackSet based on Accounts and Regions: This feature will allow flexibility for the customers to roll out updates on a StackSet based on specific Accounts and Regions. 2) Support for customized ExecutionRoleName: This feature will allow customers to attach ExecutionRoleName to the StackSet thus ensuring more security and controlling the behavior of any AWS resources in the target accounts."
6
+ }
7
+ ]
vendor/aws/aws-sdk-php/.changes/3.56.6 ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
1
+ [
2
+ {
3
+ "type": "api-change",
4
+ "category": "ECS",
5
+ "description": "Amazon Elastic Container Service (