PluginProbe
WPWaterMark 轻水印插件 / trunk
WPWaterMark 轻水印插件 vtrunk
5.2.4 5.2.2 5.2.1 5.1.7 5.1.6 trunk 4.3 5.0.0 5.0.1 5.1.2 5.1.3 5.1.4 5.1.5
wpwatermark / index.php

index.php in WPWaterMark 轻水印插件 trunk, at index.php

315 lines 9.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Name: WPWaterMark
4 * Plugin URI: https://www.lezaiyun.com/wpwatermark.html
5 * Description: WordPress轻水印插件,支持文字水印和图片水印,支持批量添加水印,支持自定义水印位置、大小、颜色、透明度等。�
6 �众号:老蒋朋友圈
7 * Version: 5.2.4
8 * Requires at least: 5.0
9 * Requires PHP: 7.4
10 * Author: 老蒋
11 * Author URI: https://www.laojiang.me
12 * License: GPL v2 or later
13 * License URI: http://www.gnu.org/licenses/gpl-2.0.html
14 * Text Domain: wpwatermark
15 */
16
17 // 防止直接访问
18 if (!defined('ABSPATH')) {
19 exit;
20 }
21
22 // 检查PHP版本要求
23 if (version_compare(PHP_VERSION, '7.4', '<')) {
24 add_action('admin_notices', function() {
25 echo '<div class="notice notice-error"><p>' .
26 sprintf(__('WPWaterMark 插件需要 PHP %s 或更高版本。您当前的PHP版本是 %s,请升级您的PHP版本。', 'wpwatermark'),
27 '7.4', PHP_VERSION) .
28 '</p></div>';
29 });
30 return;
31 }
32
33 // 定义插件版本和路径常量
34 define('WPWaterMark_VERSION', '5.2.4');
35 define('WPWaterMark_PLUGIN_DIR', plugin_dir_path(__FILE__));
36 define('WPWaterMark_PLUGIN_URL', plugin_dir_url(__FILE__));
37 define('WPWaterMark_BASENAME', plugin_basename(__FILE__));
38
39 // 加载�
40 要的类
41 require_once(WPWaterMark_PLUGIN_DIR . 'WaterMarkConfig.php');
42 require_once(WPWaterMark_PLUGIN_DIR . 'WaterMarkHandler.php');
43
44 class WPWaterMark {
45 private $config;
46 private $handler;
47 /**
48 * 解析白名单后缀�
49 �置
50 *
51 * @return string[]
52 */
53 private function getWhitelistExtensions(): array {
54 $raw = (string) $this->config->getOption('watermark_extension_whitelist');
55 if ($raw === '') {
56 return [];
57 }
58
59 $extensions = array_map('trim', explode(',', strtolower($raw)));
60 $extensions = array_map(static function ($ext) {
61 return ltrim($ext, '.');
62 }, $extensions);
63 $extensions = array_filter($extensions, static function ($ext) {
64 return $ext !== '';
65 });
66
67 return array_values(array_unique($extensions));
68 }
69
70 /**
71 * 当前文件后缀是否在白名单中
72 */
73 private function isWhitelistedExtension(array $file): bool {
74 $ext = strtolower(pathinfo($file['file'] ?? '', PATHINFO_EXTENSION));
75 if ($ext === '') {
76 return false;
77 }
78
79 return in_array($ext, $this->getWhitelistExtensions(), true);
80 }
81
82 /**
83 * 构造函数
84 */
85 public function __construct() {
86 // 初始化组件
87 $this->config = WaterMarkConfig::loadFromWordPress();
88 $this->handler = new WaterMarkHandler($this->config->getOptions());
89
90 // 注册钩子
91 add_action('admin_menu', array($this, 'addAdminMenu'));
92 add_action('admin_init', array($this, 'registerSettings'));
93 add_filter('wp_handle_upload', array($this, 'handleImageUpload'));
94 add_action('admin_enqueue_scripts', array($this, 'enqueueAdminScripts'));
95
96 // 性能日志默认�
97 �闭,�
98 理旧版本遗留的定时任务
99 wp_clear_scheduled_hook('wpwatermark_clean_logs');
100 }
101
102 /**
103 * 加载管理界面所需的脚本和样式
104 */
105 public function enqueueAdminScripts($hook) {
106 if ($hook != 'settings_page_wpwatermark') {
107 return;
108 }
109
110 // 加载WordPress原生的媒体上传器
111 wp_enqueue_media();
112
113 // 加载WordPress原生的颜色选择器
114 wp_enqueue_style('wp-color-picker');
115 wp_enqueue_script('wp-color-picker');
116
117 // 加载自定义脚本和样式
118 wp_enqueue_style(
119 'wpwatermark-admin',
120 WPWaterMark_PLUGIN_URL . 'css/admin.css',
121 array(),
122 WPWaterMark_VERSION
123 );
124
125 wp_enqueue_script(
126 'wpwatermark-admin',
127 WPWaterMark_PLUGIN_URL . 'js/admin.js',
128 array('jquery', 'wp-color-picker'),
129 WPWaterMark_VERSION,
130 true
131 );
132 }
133
134 /**
135 * 添加管理菜单
136 */
137 public function addAdminMenu() {
138 add_options_page(
139 'WPWaterMark设置',
140 'WPWaterMark',
141 'manage_options',
142 'wpwatermark',
143 array($this, 'displaySettingsPage')
144 );
145 }
146
147 /**
148 * 注册设置
149 */
150 public function registerSettings() {
151 register_setting('wpwatermark_options', 'wpwatermark_options', array($this, 'validateSettings'));
152 }
153
154 /**
155 * 验证设置
156 */
157 public function validateSettings($input) {
158 $config = new WaterMarkConfig($input);
159 return $config->getOptions();
160 }
161
162 /**
163 * 处理图片上传
164 */
165 public function handleImageUpload($file) {
166 // 检查是否为图片
167 if (strpos($file['type'], 'image') === false) {
168 return $file;
169 }
170
171 // 检查当前图片类型是否支持水印处理
172 if (!in_array($file['type'], WaterMarkHandler::getSupportedMimeTypes(), true)) {
173 return $file;
174 }
175
176 // 检查水印功能是否启用
177 if ($this->config->getOption('watermark_enabled') !== '1') {
178 return $file;
179 }
180
181 // 白名单后缀不添加水印
182 if ($this->isWhitelistedExtension($file)) {
183 return $file;
184 }
185
186 // 获取图片信息
187 $image_size = getimagesize($file['file']);
188 if (!$image_size) {
189 return $file;
190 }
191
192 // 检查图片尺寸是否满足要求
193 if ($image_size[0] < $this->config->getOption('watermark_min_width') ||
194 $image_size[1] < $this->config->getOption('watermark_min_height')) {
195 return $file;
196 }
197
198 try {
199 // 添加水印
200 if ($this->config->getOption('watermark_type') === 'text_watermark') {
201 $this->handler->createTextWatermark(
202 $file['file'],
203 $file['file'],
204 $this->config->getOption('text_content')
205 );
206 } else {
207 $this->handler->createImageWatermark(
208 $file['file'],
209 $this->config->getOption('watermark_mark_image'),
210 $file['file']
211 );
212 }
213 } catch (Exception $e) {
214 error_log('WPWaterMark Error: ' . $e->getMessage());
215 }
216
217 return $file;
218 }
219
220 /**
221 * 显示设置页面
222 */
223 public function displaySettingsPage() {
224 if (!current_user_can('manage_options')) {
225 wp_die(__('Insufficient privileges!', 'wpwatermark'));
226 }
227
228 // 确保选项存在
229 $wpwatermark_options = get_option('wpwatermark_options');
230 if (!is_array($wpwatermark_options)) {
231 $config = new WaterMarkConfig();
232 $wpwatermark_options = $config->getOptions();
233 update_option('wpwatermark_options', $wpwatermark_options);
234 }
235
236 // 加载设置页面模板
237 require_once(WPWaterMark_PLUGIN_DIR . 'setting_page.php');
238 wpwatermark_setting_page();
239 }
240
241 /**
242 * 插件激活时的处理
243 */
244 public static function activate() {
245 // 创建�
246 要的目录
247 $dirs = array('cache');
248 foreach ($dirs as $dir) {
249 $path = WPWaterMark_PLUGIN_DIR . $dir;
250 if (!file_exists($path)) {
251 wp_mkdir_p($path);
252 }
253 }
254
255 // 设置默认选项
256 if (!get_option('wpwatermark_options')) {
257 $config = new WaterMarkConfig();
258 update_option('wpwatermark_options', $config->getOptions());
259 }
260 }
261
262 /**
263 * 插件停用时的处理
264 */
265 public static function deactivate() {
266 wp_clear_scheduled_hook('wpwatermark_clean_logs');
267 }
268
269 /**
270 * 插件卸载时的处理
271 */
272 public static function uninstall() {
273 // �
274 理选项
275 delete_option('wpwatermark_options');
276
277 // �
278 理文件
279 $dirs = array('cache', 'logs');
280 foreach ($dirs as $dir) {
281 $path = WPWaterMark_PLUGIN_DIR . $dir;
282 if (file_exists($path)) {
283 self::removeDirectory($path);
284 }
285 }
286 }
287
288 /**
289 * 递归删除目录
290 */
291 private static function removeDirectory($dir) {
292 if (is_dir($dir)) {
293 $objects = scandir($dir);
294 foreach ($objects as $object) {
295 if ($object != "." && $object != "..") {
296 if (is_dir($dir . "/" . $object)) {
297 self::removeDirectory($dir . "/" . $object);
298 } else {
299 unlink($dir . "/" . $object);
300 }
301 }
302 }
303 rmdir($dir);
304 }
305 }
306 }
307
308 // 注册激活、停用和卸载钩子
309 register_activation_hook(__FILE__, array('WPWaterMark', 'activate'));
310 register_deactivation_hook(__FILE__, array('WPWaterMark', 'deactivate'));
311 register_uninstall_hook(__FILE__, array('WPWaterMark', 'uninstall'));
312
313 // 初始化插件
314 $wpwatermark = new WPWaterMark();
315