Nessuna descrizione

class-extensions.php 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. <?php
  2. namespace um;
  3. // Exit if executed directly
  4. if ( ! defined( 'ABSPATH' ) ) exit;
  5. if ( ! class_exists( 'um\Extensions' ) ) {
  6. /**
  7. * Class Extensions
  8. *
  9. * @package um
  10. *
  11. * @method void bbpress_activation()
  12. */
  13. class Extensions {
  14. /**
  15. * Extensions list
  16. *
  17. * @var array
  18. */
  19. var $list = array();
  20. /**
  21. * Extensions data
  22. *
  23. * @var array
  24. */
  25. var $plugin_data = array();
  26. /**
  27. * Extensions constructor.
  28. */
  29. function __construct() {
  30. }
  31. /**
  32. *
  33. */
  34. function check_dependencies() {
  35. $extensions = $this->get_list();
  36. foreach ( $extensions as $slug ) {
  37. $extension = $this->get_info( $slug );
  38. list( $run, $slug, $message ) = apply_filters_ref_array( 'um_extension_custom_dependencies', array( true, $slug, '' ) );
  39. if ( $run ) {
  40. $compare_version_result = UM()->dependencies()->compare_versions( $extension['min_core_version'], $extension['version'], $slug, $extension['title'] );
  41. if ( true !== $compare_version_result ) {
  42. UM()->admin()->notices()->add_notice( "{$slug}_dependencies", array(
  43. 'class' => 'error',
  44. 'message' => '<p>' . $compare_version_result . '</p>',
  45. ), 1 );
  46. }
  47. } elseif ( ! $run && ! empty( $message ) ) {
  48. UM()->admin()->notices()->add_notice( "{$slug}_dependencies", array(
  49. 'class' => 'error',
  50. 'message' => $message,
  51. ), 1 );
  52. }
  53. if ( $run ) {
  54. UM()->call_class( "um_ext\um_{$slug}\Init" );
  55. }
  56. }
  57. }
  58. /**
  59. * @param $settings
  60. *
  61. * @return mixed
  62. */
  63. function license_options( $settings ) {
  64. $extensions = $this->get_list();
  65. if ( empty( $extensions ) ) {
  66. return $settings;
  67. }
  68. foreach ( $extensions as $slug ) {
  69. $extension = $this->get_info( $slug );
  70. if ( isset( $extension['plan'] ) && $extension['plan'] == 'free' ) {
  71. continue;
  72. }
  73. $settings['licenses']['fields'][] = array(
  74. 'id' => "um_{$slug}_license_key",
  75. 'label' => sprintf( __( '%s License Key', 'ultimate-member' ), $extension['title'] ),
  76. 'item_name' => $extension['item_name'],
  77. 'author' => 'Ultimate Member',
  78. 'version' => $extension['version'],
  79. );
  80. }
  81. return $settings;
  82. }
  83. /**
  84. * Loading Extensions localizations
  85. */
  86. function localization() {
  87. $extensions = $this->get_list();
  88. foreach ( $extensions as $slug ) {
  89. $extension = $this->get_info( $slug );
  90. $locale = ( get_locale() != '' ) ? get_locale() : 'en_US';
  91. load_textdomain( $extension['textdomain'], WP_LANG_DIR . '/plugins/' . $extension['textdomain'] . '-' . $locale . '.mo');
  92. load_plugin_textdomain( $extension['textdomain'], false, dirname( $extension['plugin'] ) . '/languages/' );
  93. }
  94. }
  95. /**
  96. * @param $slug
  97. *
  98. * @return string
  99. */
  100. function get_version( $slug ) {
  101. $version = '';
  102. return $version;
  103. }
  104. /**
  105. * @param $slug
  106. * @param bool $field
  107. *
  108. * @return array|bool
  109. */
  110. function get_info( $slug, $field = false ) {
  111. if ( ! $field ) {
  112. return ! empty( $this->plugin_data[ $slug ] ) ? $this->plugin_data[ $slug ] : array();
  113. } else {
  114. return ! empty( $this->plugin_data[ $slug ][ $field ] ) ? $this->plugin_data[ $slug ][ $field ] : false;
  115. }
  116. }
  117. /**
  118. * @param string $slug
  119. * @param array $plugin_data
  120. */
  121. function add( $slug, $plugin_data ) {
  122. $this->list[] = $slug;
  123. $this->plugin_data[ $slug ] = $plugin_data;
  124. }
  125. /**
  126. * Activate Extension Process
  127. * Common functions in activation
  128. *
  129. * @param $slug
  130. */
  131. function activate( $slug ) {
  132. $plugin_data = $this->get_info( $slug );
  133. //if extension wasn't inited, init it firstly via "um_{$slug}_add" function
  134. //"um_{$slug}_add" must be in the preset structure of UM extension
  135. if ( empty( $plugin_data ) && function_exists( "um_{$slug}_add" ) ) {
  136. call_user_func( "um_{$slug}_add" );
  137. $plugin_data = $this->get_info( $slug );
  138. }
  139. //first install
  140. $version = get_option( "um_{$slug}_version" );
  141. if ( ! $version ) {
  142. update_option( "um_{$slug}_last_version_upgrade", $plugin_data['version'] );
  143. }
  144. if ( $version != $plugin_data['version'] ) {
  145. update_option( "um_{$slug}_version", $plugin_data['version'] );
  146. }
  147. //start setup
  148. UM()->extension( $slug )->setup()->start();
  149. }
  150. /**
  151. * @return array
  152. */
  153. function get_list() {
  154. return $this->list;
  155. }
  156. function get_packages( $slug ) {
  157. $plugin_info = $this->get_info( $slug );
  158. $packages_dir = $plugin_info['path'] . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'admin' . DIRECTORY_SEPARATOR . 'core' . DIRECTORY_SEPARATOR . 'packages';
  159. $update_versions = array();
  160. $handle = opendir( $packages_dir );
  161. if ( $handle ) {
  162. while ( false !== ( $filename = readdir( $handle ) ) ) {
  163. if ( $filename != '.' && $filename != '..' ) {
  164. if ( is_dir( $packages_dir . DIRECTORY_SEPARATOR . $filename ) ) {
  165. $update_versions[] = $filename;
  166. }
  167. }
  168. }
  169. closedir( $handle );
  170. usort( $update_versions, array( UM()->admin_upgrade(), 'version_compare_sort' ) );
  171. }
  172. return $update_versions;
  173. }
  174. }
  175. }