PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.7
Advanced Ads – Ad Manager & AdSense v2.0.7
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 1 year ago checks.php 1 year ago display-conditions.php 1 year ago filesystem.php 2 years ago frontend_checks.php 1 year ago in-content-injector.php 1 year ago inline-css.php 1 year ago utils.php 1 year ago visitor-conditions.php 1 year ago
filesystem.php
166 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 // This will output a credentials form in event of failure, We don't want that, so just hide with a buffer.
41 ob_start();
42 $credentials = request_filesystem_credentials( '', '', false, $directories[0] );
43 ob_end_clean();
44
45 if ( false === $credentials ) {
46 return false;
47 }
48
49 if ( ! WP_Filesystem( $credentials ) ) {
50 $error = true;
51 if ( is_object( $wp_filesystem ) && $wp_filesystem->errors->get_error_code() ) {
52 $error = $wp_filesystem->errors;
53 }
54 // Failed to connect, Error and request again.
55 ob_start();
56 request_filesystem_credentials( '', '', $error, $directories[0] );
57 ob_end_clean();
58 return false;
59 }
60
61 if ( ! is_object( $wp_filesystem) ) {
62 return new WP_Error( 'fs_unavailable', __( 'Could not access filesystem.', 'advanced-ads' ) );
63 }
64
65 if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
66 return new WP_Error( 'fs_error', __( 'Filesystem error.', 'advanced-ads' ), $wp_filesystem->errors);
67 }
68
69 foreach ( (array) $directories as $dir ) {
70 switch ( $dir ) {
71 case ABSPATH:
72 if ( ! $wp_filesystem->abspath() )
73 return new WP_Error( 'fs_no_root_dir', __( 'Unable to locate WordPress root directory.', 'advanced-ads' ) );
74 break;
75 case WP_CONTENT_DIR:
76 if ( ! $wp_filesystem->wp_content_dir() )
77 return new WP_Error( 'fs_no_content_dir', __( 'Unable to locate WordPress content directory (wp-content).', 'advanced-ads' ) );
78 break;
79 default:
80 if ( ! $wp_filesystem->find_folder( $dir ) )
81 /* translators: %s directory */
82 return new WP_Error( 'fs_no_folder', sprintf( __( 'Unable to locate needed folder (%s).', 'advanced-ads' ) , esc_html( basename( $dir ) ) ) );
83 break;
84 }
85 }
86
87 return true;
88 }
89
90 /**
91 * Replace the 'direct' absolute path with the Filesystem API path. Useful only when the 'direct' method is not used.
92 * Works only with folders.
93 * Check https://codex.wordpress.org/Filesystem_API for info
94 *
95 * @param string existing path
96 * @return string normalized path
97 */
98 public function normalize_path( $path ) {
99 global $wp_filesystem;
100 return $wp_filesystem->find_folder( $path );
101 }
102
103 /**
104 * Recursive directory creation based on full path.
105 *
106 * @param string $target Full path to attempt to create.
107 * @return bool Whether the path was created. True if path already exists.
108 */
109 public function mkdir_p( $target ) {
110 global $wp_filesystem;
111
112 if ( $wp_filesystem instanceof WP_Filesystem_Direct ) {
113 return wp_mkdir_p( $target );
114 }
115
116 $target = rtrim($target, '/');
117 if ( empty($target) ) {
118 $target = '/';
119 }
120
121 if ( $wp_filesystem->exists( $target ) ) {
122 return $wp_filesystem->is_dir( $target );
123 }
124
125 $target_parent = dirname( $target );
126 while ( '.' != $target_parent && ! $wp_filesystem->is_dir( $target_parent ) ) {
127 $target_parent = dirname( $target_parent );
128 }
129
130 $folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
131 for ( $i = 1, $c = count( $folder_parts ); $i <= $c; $i++ ) {
132 $dir = $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) );
133 if ( $wp_filesystem->exists( $dir ) ) { continue; }
134
135 if ( ! $wp_filesystem->mkdir( $dir ) ) {
136 return false;
137 }
138 }
139 return true;
140 }
141
142 /**
143 * Print the filesystem credentials modal when needed.
144 */
145 public function print_request_filesystem_credentials_modal() {
146 $filesystem_method = get_filesystem_method();
147 ob_start();
148 $filesystem_credentials_are_stored = request_filesystem_credentials( self_admin_url() );
149 ob_end_clean();
150 $request_filesystem_credentials = ( $filesystem_method != 'direct' && ! $filesystem_credentials_are_stored );
151 if ( ! $request_filesystem_credentials ) {
152 return;
153 }
154 ?>
155 <div id="advanced-ads-rfc-dialog" class="notification-dialog-wrap request-filesystem-credentials-dialog">
156 <div class="notification-dialog-background"></div>
157 <div class="notification-dialog" role="dialog" aria-labelledby="request-filesystem-credentials-title" tabindex="0">
158 <div class="request-filesystem-credentials-dialog-content">
159 <?php request_filesystem_credentials( site_url() ); ?>
160 </div>
161 </div>
162 </div>
163 <?php
164 }
165 }
166