PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / trunk
Advanced Ads – Ad Manager & AdSense vtrunk
2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / classes / filesystem.php
advanced-ads / classes Last commit date
ad-health-notices.php 3 weeks ago checks.php 3 months ago display-conditions.php 3 weeks ago filesystem.php 3 weeks ago frontend_checks.php 2 days ago inline-css.php 1 year ago utils.php 2 days ago visitor-conditions.php 1 year ago
filesystem.php
176 lines
1 <?php // phpcs:ignoreFile
2
3 /**
4 * @since 1.7.17
5 */
6 class Advanced_Ads_Filesystem {
7 /**
8 * Singleton instance of the class
9 *
10 * @var Advanced_Ads_Filesystem
11 */
12 protected static $instance;
13
14 /**
15 * Return an instance of Advanced_Ads_Filesystem
16 *
17 * @return Advanced_Ads_Filesystem
18 */
19 public static function get_instance() {
20 if ( null === self::$instance ) {
21 self::$instance = new self;
22 }
23
24 return self::$instance;
25 }
26
27 private function __construct() {}
28
29 /**
30 * Connect to the filesystem.
31 *
32 * @param array $directories A list of directories. If any of these do
33 * not exist, a WP_Error object will be returned.
34 * @return bool|WP_Error True if able to connect, false or a WP_Error otherwise.
35 */
36 public function fs_connect( $directories = [] ) {
37 global $wp_filesystem;
38 $directories = ( is_array( $directories ) && count( $directories ) ) ? $directories : [ WP_CONTENT_DIR ];
39
40 // Check the filesystem method.
41 $method = get_filesystem_method( [], $directories[0] );
42
43 if ( 'direct' === $method ) {
44 // If direct method, initialize WP_Filesystem without credentials check.
45 if ( ! WP_Filesystem() ) {
46 return false;
47 }
48 } else {
49 // This will output a credentials form in event of failure. We don't want that, so just hide with a buffer.
50 ob_start();
51 $credentials = request_filesystem_credentials( '', '', false, $directories[0] );
52 ob_end_clean();
53
54 if ( false === $credentials ) {
55 return false;
56 }
57
58 if ( ! WP_Filesystem( $credentials ) ) {
59 $error = true;
60 if ( is_object( $wp_filesystem ) && $wp_filesystem->errors->get_error_code() ) {
61 $error = $wp_filesystem->errors;
62 }
63 // Failed to connect, Error and request again.
64 ob_start();
65 request_filesystem_credentials( '', '', $error, $directories[0] );
66 ob_end_clean();
67 return false;
68 }
69 }
70
71 if ( ! is_object( $wp_filesystem) ) {
72 return new WP_Error( 'fs_unavailable', __( 'Could not access filesystem.', 'advanced-ads' ) );
73 }
74
75 if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
76 return new WP_Error( 'fs_error', __( 'Filesystem error.', 'advanced-ads' ), $wp_filesystem->errors);
77 }
78
79 foreach ( (array) $directories as $dir ) {
80 switch ( $dir ) {
81 case ABSPATH:
82 if ( ! $wp_filesystem->abspath() )
83 return new WP_Error( 'fs_no_root_dir', __( 'Unable to locate WordPress root directory.', 'advanced-ads' ) );
84 break;
85 case WP_CONTENT_DIR:
86 if ( ! $wp_filesystem->wp_content_dir() )
87 return new WP_Error( 'fs_no_content_dir', __( 'Unable to locate WordPress content directory (wp-content).', 'advanced-ads' ) );
88 break;
89 default:
90 if ( ! $wp_filesystem->find_folder( $dir ) )
91 /* translators: %s directory */
92 return new WP_Error( 'fs_no_folder', sprintf( __( 'Unable to locate needed folder (%s).', 'advanced-ads' ) , esc_html( basename( $dir ) ) ) );
93 break;
94 }
95 }
96
97 return true;
98 }
99
100 /**
101 * Replace the 'direct' absolute path with the Filesystem API path. Useful only when the 'direct' method is not used.
102 * Works only with folders.
103 * Check https://codex.wordpress.org/Filesystem_API for info
104 *
105 * @param string existing path
106 * @return string normalized path
107 */
108 public function normalize_path( $path ) {
109 global $wp_filesystem;
110 return $wp_filesystem->find_folder( $path );
111 }
112
113 /**
114 * Recursive directory creation based on full path.
115 *
116 * @param string $target Full path to attempt to create.
117 * @return bool Whether the path was created. True if path already exists.
118 */
119 public function mkdir_p( $target ) {
120 global $wp_filesystem;
121
122 if ( $wp_filesystem instanceof WP_Filesystem_Direct ) {
123 return wp_mkdir_p( $target );
124 }
125
126 $target = rtrim($target, '/');
127 if ( empty($target) ) {
128 $target = '/';
129 }
130
131 if ( $wp_filesystem->exists( $target ) ) {
132 return $wp_filesystem->is_dir( $target );
133 }
134
135 $target_parent = dirname( $target );
136 while ( '.' != $target_parent && ! $wp_filesystem->is_dir( $target_parent ) ) {
137 $target_parent = dirname( $target_parent );
138 }
139
140 $folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
141 for ( $i = 1, $c = count( $folder_parts ); $i <= $c; $i++ ) {
142 $dir = $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) );
143 if ( $wp_filesystem->exists( $dir ) ) { continue; }
144
145 if ( ! $wp_filesystem->mkdir( $dir ) ) {
146 return false;
147 }
148 }
149 return true;
150 }
151
152 /**
153 * Print the filesystem credentials modal when needed.
154 */
155 public function print_request_filesystem_credentials_modal() {
156 $filesystem_method = get_filesystem_method();
157 ob_start();
158 $filesystem_credentials_are_stored = request_filesystem_credentials( self_admin_url() );
159 ob_end_clean();
160 $request_filesystem_credentials = ( $filesystem_method != 'direct' && ! $filesystem_credentials_are_stored );
161 if ( ! $request_filesystem_credentials ) {
162 return;
163 }
164 ?>
165 <div id="advanced-ads-rfc-dialog" class="notification-dialog-wrap request-filesystem-credentials-dialog">
166 <div class="notification-dialog-background"></div>
167 <div class="notification-dialog" role="dialog" aria-labelledby="request-filesystem-credentials-title" tabindex="0">
168 <div class="request-filesystem-credentials-dialog-content">
169 <?php request_filesystem_credentials( site_url() ); ?>
170 </div>
171 </div>
172 </div>
173 <?php
174 }
175 }
176