PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/p/membership-pro/app/view/settings/import/class-ms-view-settings-import-settings.php

https://bitbucket.org/matthewselby/wpdev
PHP | 465 lines | 398 code | 37 blank | 30 comment | 47 complexity | 97ee22336f3ecd49ce5712f73e76e422 MD5 | raw file
Possible License(s): Apache-2.0, GPL-2.0, LGPL-3.0, LGPL-2.1, AGPL-1.0, BSD-3-Clause, MIT, GPL-3.0, MPL-2.0-no-copyleft-exception
  1. <?php
  2. /**
  3. * View.
  4. *
  5. * @package Membership2
  6. */
  7. /**
  8. * Displays the Import preview.
  9. *
  10. * @since 1.0.0
  11. */
  12. class MS_View_Settings_Import_Settings extends MS_View {
  13. /**
  14. * Displays the import preview form.
  15. *
  16. * @since 1.0.0
  17. * @return string
  18. */
  19. public function to_html() {
  20. $data = apply_filters(
  21. 'ms_import_preview_data_before',
  22. $this->data['model']->source
  23. );
  24. $compact = ! empty( $this->data['compact'] );
  25. if ( ! is_object( $data ) ) {
  26. $data = (object) array(
  27. 'memberships' => array(),
  28. 'members' => array(),
  29. 'notes' => array(),
  30. 'settings' => array(),
  31. 'source' => '',
  32. 'export_time' => '',
  33. );
  34. }
  35. // Converts object to array.
  36. if ( is_a( $data, 'SimpleXMLElement' ) ) {
  37. $data = MS_Helper_Utility::xml2array( $data );
  38. $data = ( object ) $data;
  39. }
  40. $data->memberships = isset( $data->memberships ) ? (array) $data->memberships : array();
  41. $data->members = isset( $data->members ) ? (array) $data->members : array();
  42. $fields = $this->prepare_fields( $data );
  43. if ( $compact ) {
  44. $overview_box = array(
  45. $fields['batchsize'],
  46. $fields['sep'],
  47. $fields['clear_all'],
  48. $fields['skip'],
  49. $fields['import'],
  50. );
  51. } else {
  52. $overview_box = array(
  53. $fields['details'],
  54. $fields['sep'],
  55. $fields['batchsize'],
  56. $fields['sep'],
  57. $fields['clear_all'],
  58. $fields['back'],
  59. $fields['import'],
  60. $fields['download'],
  61. );
  62. }
  63. ob_start();
  64. MS_Helper_Html::settings_box(
  65. $overview_box,
  66. __( 'Import Overview', 'membership2' )
  67. );
  68. if ( ! $compact ) {
  69. if ( !empty( $data->memberships ) ) {
  70. MS_Helper_Html::settings_box(
  71. array( $fields['memberships'] ),
  72. __( 'List of all Memberships', 'membership2' ),
  73. '',
  74. 'open'
  75. );
  76. }
  77. if ( !empty( $data->members ) ) {
  78. MS_Helper_Html::settings_box(
  79. array( $fields['members'] ),
  80. __( 'List of all Members', 'membership2' ),
  81. '',
  82. 'open'
  83. );
  84. }
  85. if ( isset( $data->settings ) ) {
  86. MS_Helper_Html::settings_box(
  87. array( $fields['settings'] ),
  88. __( 'Imported Settings', 'membership2' ),
  89. '',
  90. 'open'
  91. );
  92. }
  93. }
  94. echo '<script>window._ms_import_obj = ' . json_encode( $data ) . '</script>';
  95. $html = ob_get_clean();
  96. return apply_filters(
  97. 'ms_import_preview_object',
  98. $html,
  99. $data
  100. );
  101. }
  102. /**
  103. * Prepare the HTML fields that can be displayed
  104. *
  105. * @since 1.0.0
  106. *
  107. * @param object $data The import data object.
  108. * @return array
  109. */
  110. protected function prepare_fields( $data ) {
  111. // List of known Membership types; used to display the nice-name.
  112. $ms_types = MS_Model_Membership::get_types();
  113. $ms_paytypes = MS_Model_Membership::get_payment_types();
  114. $total_memberships = 0;
  115. $total_members = 0;
  116. // Prepare the "Memberships" table.
  117. $memberships = array();
  118. if ( isset ( $data->memberships ) && !empty( $data->memberships ) ) {
  119. $memberships = array(
  120. array(
  121. __( 'Membership name', 'membership2' ),
  122. __( 'Membership Type', 'membership2' ),
  123. __( 'Payment Type', 'membership2' ),
  124. __( 'Description', 'membership2' ),
  125. ),
  126. );
  127. foreach ( $data->memberships as $item ) {
  128. if ( is_array( $item ) && isset( $item['membership'] ) && is_array( $item['membership'] ) ) {
  129. foreach ( $item['membership'] as $membership ) {
  130. $membership = ( object ) $membership;
  131. $output = MS_Helper_Import::membership_to_view( $membership, $ms_types, $ms_paytypes );
  132. $memberships[] = $output;
  133. $total_memberships++;
  134. }
  135. } else {
  136. $output = MS_Helper_Import::membership_to_view( $item, $ms_types, $ms_paytypes );
  137. $memberships[] = $output;
  138. $total_memberships++;
  139. }
  140. }
  141. }
  142. $members = array();
  143. if ( isset ( $data->members ) && !empty( $data->members ) ) {
  144. // Prepare the "Members" table.
  145. $members = array(
  146. array(
  147. __( 'Username', 'membership2' ),
  148. __( 'Email', 'membership2' ),
  149. __( 'Subscriptions', 'membership2' ),
  150. __( 'Invoices', 'membership2' ),
  151. ),
  152. );
  153. foreach ( $data->members as $item ) {
  154. if ( is_array( $item ) && isset( $item['member'] ) && is_array( $item['member'] ) ) {
  155. foreach ( $item['member'] as $member ) {
  156. $member = ( object ) $member;
  157. $output = MS_Helper_Import::member_to_view( $member );
  158. $members[] = $output;
  159. $total_members++;
  160. }
  161. } else {
  162. $output = MS_Helper_Import::member_to_view( $item );
  163. $members[] = $output;
  164. $total_members++;
  165. }
  166. }
  167. }
  168. $settings = array();
  169. if ( isset ( $data->settings ) ) {
  170. foreach ( $data->settings as $setting => $value ) {
  171. switch ( $setting ) {
  172. case 'addons':
  173. $model = MS_Factory::load( 'MS_Model_Addon' );
  174. $list = $model->get_addon_list();
  175. $code = '';
  176. foreach ( $value as $addon => $state ) {
  177. if ( $state ) {
  178. $code .= __( 'Activate: ', 'membership2' );
  179. } else {
  180. $code .= __( 'Dectivate: ', 'membership2' );
  181. }
  182. $code .= $list[ $addon ]->name . '<br/>';
  183. }
  184. $settings[] = array(
  185. __( 'Add-Ons', 'membership2' ),
  186. $code,
  187. );
  188. break;
  189. }
  190. }
  191. }
  192. // Prepare the return value.
  193. $fields = array();
  194. // Export-Notes.
  195. $notes = '';
  196. if ( isset( $data->notes ) ) {
  197. if ( is_scalar( $data->notes ) ) {
  198. $notes = array( $data->notes );
  199. }
  200. $in_sub = false;
  201. $notes = '<ul class="ms-import-notes">';
  202. foreach ( $data->notes as $line => $text ) {
  203. if ( is_array( $text ) && isset( $text['note'] ) ) {
  204. $text = $text['note'];
  205. }
  206. $is_sub = ( strpos( $text, '- ' ) === 0 );
  207. if ( $in_sub != $is_sub ) {
  208. $in_sub = $is_sub;
  209. if ( $is_sub ) {
  210. $notes .= '<ul>';
  211. } else {
  212. $notes .= '</ul>';
  213. }
  214. }
  215. if ( $in_sub ) {
  216. $text = substr( $text, 2 );
  217. }
  218. $notes .= '<li>' . $text;
  219. }
  220. $notes .= '</ul>';
  221. }
  222. if ( ( isset( $data->memberships ) && !empty( $data->memberships ) ) && ( isset( $data->members ) && !empty( $data->members ) ) ) {
  223. $fields['details'] = array(
  224. 'type' => MS_Helper_Html::TYPE_HTML_TABLE,
  225. 'class' => 'ms-import-preview',
  226. 'value' => array(
  227. array(
  228. __( 'Data source', 'membership2' ),
  229. $data->source .
  230. ' &emsp; <small>' .
  231. sprintf(
  232. __( 'exported on %1$s', 'membership2' ),
  233. $data->export_time
  234. ) .
  235. '</small>',
  236. ),
  237. array(
  238. __( 'Content', 'membership2' ),
  239. sprintf(
  240. _n(
  241. '%1$s Membership',
  242. '%1$s Memberships',
  243. $total_memberships,
  244. 'membership2'
  245. ),
  246. '<b>' . $total_memberships . '</b>'
  247. ) . ' / ' . sprintf(
  248. _n(
  249. '%1$s Member',
  250. '%1$s Members',
  251. $total_members,
  252. 'membership2'
  253. ),
  254. '<b>' . $total_members . '</b>'
  255. ),
  256. ),
  257. ),
  258. 'field_options' => array(
  259. 'head_col' => true,
  260. 'head_row' => false,
  261. 'col_class' => array( 'preview-label', 'preview-data' ),
  262. ),
  263. );
  264. } else if ( isset( $data->memberships ) && !empty( $data->memberships ) ) {
  265. $fields['details'] = array(
  266. 'type' => MS_Helper_Html::TYPE_HTML_TABLE,
  267. 'class' => 'ms-import-preview',
  268. 'value' => array(
  269. array(
  270. __( 'Data source', 'membership2' ),
  271. $data->source .
  272. ' &emsp; <small>' .
  273. sprintf(
  274. __( 'exported on %1$s', 'membership2' ),
  275. $data->export_time
  276. ) .
  277. '</small>',
  278. ),
  279. array(
  280. __( 'Content', 'membership2' ),
  281. sprintf(
  282. _n(
  283. '%1$s Membership',
  284. '%1$s Memberships',
  285. $total_memberships,
  286. 'membership2'
  287. ),
  288. '<b>' . $total_memberships . '</b>'
  289. )
  290. ),
  291. ),
  292. 'field_options' => array(
  293. 'head_col' => true,
  294. 'head_row' => false,
  295. 'col_class' => array( 'preview-label', 'preview-data' ),
  296. ),
  297. );
  298. } else if ( isset( $data->members ) && !empty( $data->members ) ) {
  299. $fields['details'] = array(
  300. 'type' => MS_Helper_Html::TYPE_HTML_TABLE,
  301. 'class' => 'ms-import-preview',
  302. 'value' => array(
  303. array(
  304. __( 'Data source', 'membership2' ),
  305. $data->source .
  306. ' &emsp; <small>' .
  307. sprintf(
  308. __( 'exported on %1$s', 'membership2' ),
  309. $data->export_time
  310. ) .
  311. '</small>',
  312. ),
  313. array(
  314. __( 'Content', 'membership2' ),
  315. sprintf(
  316. _n(
  317. '%1$s Member',
  318. '%1$s Members',
  319. $total_members,
  320. 'membership2'
  321. ),
  322. '<b>' . $total_members . '</b>'
  323. ),
  324. ),
  325. ),
  326. 'field_options' => array(
  327. 'head_col' => true,
  328. 'head_row' => false,
  329. 'col_class' => array( 'preview-label', 'preview-data' ),
  330. ),
  331. );
  332. }
  333. if ( ! empty( $notes ) ) {
  334. $fields['details']['value'][] = array(
  335. __( 'Please note', 'membership2' ),
  336. $notes,
  337. );
  338. }
  339. $batchsizes = array(
  340. 1 => __( 'Each item on its own' ),
  341. 10 => __( 'Small (10 items)' ),
  342. 30 => __( 'Normal (30 items)' ),
  343. 100 => __( 'Big (100 items)' ),
  344. );
  345. $fields['batchsize'] = array(
  346. 'id' => 'batchsize',
  347. 'type' => MS_Helper_Html::INPUT_TYPE_SELECT,
  348. 'title' => __( 'Batch size for import', 'membership2' ),
  349. 'desc' => __( 'Big batches will be processed faster but may result in PHP Memory errors.', 'membership2' ),
  350. 'value' => 10,
  351. 'field_options' => $batchsizes,
  352. 'class' => 'sel-batchsize',
  353. );
  354. $fields['clear_all'] = array(
  355. 'id' => 'clear_all',
  356. 'type' => MS_Helper_Html::INPUT_TYPE_CHECKBOX,
  357. 'title' => __( 'Replace current content with import data (removes existing Memberships/Members before importing data)', 'membership2' ),
  358. 'class' => 'widefat',
  359. );
  360. if ( !empty ( $memberships ) ) {
  361. $fields['memberships'] = array(
  362. 'type' => MS_Helper_Html::TYPE_HTML_TABLE,
  363. 'class' => 'ms-import-preview',
  364. 'value' => $memberships,
  365. 'field_options' => array(
  366. 'head_col' => false,
  367. 'head_row' => true,
  368. 'col_class' => array( 'preview-name', 'preview-type', 'preview-pay-type', 'preview-desc' ),
  369. ),
  370. );
  371. }
  372. if ( !empty ( $members ) ) {
  373. $fields['members'] = array(
  374. 'type' => MS_Helper_Html::TYPE_HTML_TABLE,
  375. 'class' => 'ms-import-preview',
  376. 'value' => $members,
  377. 'field_options' => array(
  378. 'head_col' => false,
  379. 'head_row' => true,
  380. 'col_class' => array( 'preview-name', 'preview-email', 'preview-count', 'preview-count' ),
  381. ),
  382. );
  383. }
  384. if ( !empty( $settings ) ) {
  385. $fields['settings'] = array(
  386. 'type' => MS_Helper_Html::TYPE_HTML_TABLE,
  387. 'class' => 'ms-import-preview',
  388. 'value' => $settings,
  389. 'field_options' => array(
  390. 'head_col' => true,
  391. 'head_row' => false,
  392. ),
  393. );
  394. }
  395. $fields['sep'] = array(
  396. 'type' => MS_Helper_Html::TYPE_HTML_SEPARATOR,
  397. );
  398. $fields['back'] = array(
  399. 'type' => MS_Helper_Html::TYPE_HTML_LINK,
  400. 'class' => 'wpmui-field-button button',
  401. 'value' => __( 'Cancel', 'membership2' ),
  402. 'url' => $_SERVER['REQUEST_URI'],
  403. );
  404. $fields['skip'] = array(
  405. 'type' => MS_Helper_Html::TYPE_HTML_LINK,
  406. 'class' => 'wpmui-field-button button',
  407. 'value' => __( 'Skip', 'membership2' ),
  408. 'url' => MS_Controller_Plugin::get_admin_url(
  409. false,
  410. array( 'skip_import' => 1 )
  411. ),
  412. );
  413. $fields['import'] = array(
  414. 'id' => 'btn-import',
  415. 'type' => MS_Helper_Html::INPUT_TYPE_BUTTON,
  416. 'value' => __( 'Import', 'membership2' ),
  417. 'button_value' => MS_Controller_Import::AJAX_ACTION_IMPORT,
  418. 'button_type' => 'submit',
  419. );
  420. $fields['download'] = array(
  421. 'id' => 'btn-download',
  422. 'type' => MS_Helper_Html::INPUT_TYPE_BUTTON,
  423. 'value' => __( 'Download as Export File', 'membership2' ),
  424. 'class' => 'button-link',
  425. );
  426. return $fields;
  427. }
  428. }