annotate .cms/index.fn.php @ 1:1d486627aa1e draft default tip

24.10
author Coffee CMS <info@coffee-cms.ru>
date Sat, 12 Oct 2024 02:51:39 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
1 <?php
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
2
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
3
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
4 // Add function to selected hook with default priority 10
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
5 function hook_add_fn( $hook, $function, $priority = 10 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
6 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
7 $cms["hooks"][$hook][$priority][$function] = true; // true - enabled
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
8 // fix warning
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
9 if ( ! isset( $cms["hooks"][$hook]["next"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
10 $cms["hooks"][$hook]["next"] = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
11 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
12 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
13
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
14
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
15 function do_hook( $hook = "" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
16 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
17
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
18 if ( empty( $cms["hooks"][$hook] ) || ! empty( $cms["hooks"][$hook]["disabled"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
19 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
20 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
21
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
22 ksort( $cms["hooks"][$hook] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
23
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
24 foreach ( $cms["hooks"][$hook] as $priority => &$value ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
25 if ( is_array( $cms["hooks"][$hook][$priority] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
26 foreach ( $cms["hooks"][$hook][$priority] as $function => &$enabled ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
27 if ( $enabled && function_exists( $function ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
28 $function();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
29 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
30 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
31 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
32 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
33
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
34 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
35
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
36
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
37 function cms_save_config() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
38 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
39 $r = file_put_contents( $cms["config_file"], '<?php $cms["config"] = ' . var_export( $cms["config"], true) . ";\n", LOCK_EX );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
40 if ( $r && function_exists( "opcache_invalidate" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
41 opcache_invalidate( $cms["config_file"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
42 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
43 return $r;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
44 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
45
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
46
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
47 #region Функции отправки письма - это комментарий для схлопывания всех фукнций письма
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
48
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
49 function cms_email_callback2( $matches ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
50 global $email_images;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
51 $n = count( $email_images );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
52 $email_images[$n] = array( "ext" => $matches[1], "base64" => $matches[2] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
53 return "cid:{$n}.{$matches[1]}";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
54 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
55
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
56 function cms_email_callback1( $matches ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
57 $r2 = preg_replace_callback( "/data:image\/(\w+);base64,(.+)/u", "cms_email_callback2", $matches[1] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
58 return "<img src=\"$r2\"";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
59 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
60
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
61 // $data["to_name"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
62 // $data["to_email"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
63 // $data["subject"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
64 // $data["email_body"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
65 // $data["from_name"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
66 // $data["from_email"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
67 // $data["reply_name"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
68 // $data["reply_to"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
69 // $data["files"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
70 // $data["type"] ( text/html or text/plain (default) )
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
71 // $data["sender"] if empty, then noreply@$_SERVER["SERVER_NAME"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
72 // $data["bcc"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
73 // return "" if success of "error:..." if error
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
74 function cms_email( $data ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
75 global $email_images;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
76
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
77 // На пустую to_email не надо проверять, потому что возможна рассылка через скрытые копии
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
78 if ( isset( $data["to_name"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
79 $to = "=?utf-8?b?" . base64_encode( $data["to_name"] ) . "?= <" . $data["to_email"] . ">";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
80 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
81 $to = $data["to_email"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
82 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
83
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
84 $subject = "=?utf-8?b?" . base64_encode( $data["subject"] ) . "?=";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
85
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
86 if ( isset( $data["from_name"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
87 $from = "=?utf-8?b?" . base64_encode( $data["from_name"] ) . "?= <" . $data["from_email"] . ">";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
88 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
89 $from = $data["from_email"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
90 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
91
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
92 if ( empty( $data["reply_to"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
93 $reply = $from;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
94 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
95 $reply = $data["reply_to"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
96 if ( ! empty( $data["reply_name"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
97 $reply = "=?utf-8?b?" . base64_encode( $data["reply_name"] ) . "?= <" . $data["reply_to"] . ">";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
98 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
99 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
100
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
101 $boundary = md5( uniqid( time() - 25 ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
102 $boundary_id = md5( uniqid( time() ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
103
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
104 if ( empty( $data["sender"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
105 $sender = "noreply@{$_SERVER['SERVER_NAME']}";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
106 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
107 $sender = $data["sender"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
108 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
109
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
110 $headers = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
111 $headers .= "Sender: {$sender}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
112 $headers .= "From: {$from}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
113 $headers .= "Reply-To: {$reply}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
114 $headers .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
115
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
116 if ( ! empty( $data["bcc"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
117 $headers .= "Bcc: {$data['bcc']}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
118 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
119
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
120 $email_images = array();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
121 $body2 = preg_replace_callback( '/<img\s[^>]*src="([^"]+)"/u', "cms_email_callback1", $data["email_body"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
122
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
123 if ( empty( $data["type"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
124 $type = "text/plain";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
125 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
126 $type = $data["type"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
127 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
128
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
129 $body_all = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
130 $body_all .= "--{$boundary}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
131 $body_all .= "Content-Type: multipart/related; boundary=\"{$boundary_id}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
132 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
133
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
134 $body_all .= "--{$boundary_id}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
135 $body_all .= "Content-Type: {$type}; charset=utf-8;\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
136 $body_all .= "Content-Transfer-Encoding: base64\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
137 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
138 $body_all .= chunk_split( base64_encode( $body2 ) ) . "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
139 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
140
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
141 foreach( $email_images as $ind => $image ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
142 $body_all .= "--{$boundary_id}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
143 $body_all .= "Content-Type: image/{$image['ext']}; name=\"{$ind}.{$image['ext']}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
144 $body_all .= "Content-ID: <{$ind}.{$image['ext']}>\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
145 $body_all .= "Content-Disposition: inline; filename=\"{$ind}.{$image['ext']}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
146 $body_all .= "Content-transfer-encoding: base64\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
147 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
148 $body_all .= chunk_split( $image["base64"] ) . "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
149 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
150 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
151
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
152 if ( isset( $data["files"] ) && is_array( $data["files"] ) )
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
153 foreach( $data["files"] as $file ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
154 $mime = mime_content_type( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
155 $name = preg_replace( "/.*\//u", "", $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
156 $body_all .= "--{$boundary_id}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
157 $body_all .= "Content-Type: {$mime}; name=\"{$name}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
158 $body_all .= "Content-Transfer-Encoding: base64\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
159 $body_all .= "Content-Disposition: attachment; filename=\"{$name}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
160 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
161 $body_all .= chunk_split( base64_encode( file_get_contents( $file ) ) ) . "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
162 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
163 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
164
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
165 $body_all .= "--{$boundary_id}--\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
166 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
167 $body_all .= "--{$boundary}--\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
168 $body_all .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
169
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
170 if ( mail( $to, $subject, $body_all, $headers, "-f{$data['from_email']}" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
171 return "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
172 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
173 return "error mail() function";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
174 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
175 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
176
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
177 // $data["to_name"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
178 // $data["to_email"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
179 // $data["subject"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
180 // $data["email_body"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
181 // $data["from_name"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
182 // $data["from_email"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
183 // $data["reply_name"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
184 // $data["reply_to"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
185 // $data["files"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
186 // $data["type"] ( text/plain (default) or text/html )
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
187 // $data["sender"] if empty, then noreply@$_SERVER["SERVER_NAME"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
188 // $data["bcc"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
189 // $data["smtp_host"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
190 // $data["smtp_port"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
191 // $data["smtp_login"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
192 // $data["smtp_password"]
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
193 // return "" if success of "error:..." if error
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
194 function cms_smtp_email( $data ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
195 global $email_images, $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
196
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
197 if ( isset( $data["to_name"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
198 $to = "=?utf-8?b?" . base64_encode( $data["to_name"] ) . "?= <" . $data["to_email"] . ">";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
199 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
200 $to = $data["to_email"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
201 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
202
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
203 if ( isset( $data["from_name"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
204 $from = "=?utf-8?b?" . base64_encode( $data["from_name"] ) . "?= <" . $data["from_email"] . ">";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
205 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
206 $from = $data["from_email"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
207 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
208
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
209 if ( empty( $data["reply_to"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
210 $reply = $from;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
211 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
212 $reply = $data["reply_to"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
213 if ( ! empty( $data["reply_name"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
214 $reply = "=?utf-8?b?" . base64_encode( $data["reply_name"] ) . "?= <" . $data["reply_to"] . ">";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
215 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
216 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
217
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
218 $boundary = md5( uniqid( time() - 25 ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
219 $boundary_id = md5( uniqid( time() ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
220
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
221 if ( empty( $data["sender"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
222 $sender = $data["from_email"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
223 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
224 $sender = $data["sender"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
225 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
226
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
227 if ( empty( $data["return_path"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
228 $return_path = $data["from_email"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
229 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
230 $return_path = $data["return_path"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
231 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
232
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
233
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
234 /* start headers */
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
235 $SEND = "Date: " . date( "r" ) . "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
236 $SEND .= "Sender: {$sender}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
237 $SEND .= "Return-Path: {$return_path}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
238 $SEND .= "Reply-To: {$reply}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
239 $SEND .= "From: {$from}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
240 $SEND .= "To: {$to}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
241 if ( ! empty( $data["bcc"] ) ) { $SEND .= "Bcc: {$data['bcc']}\r\n"; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
242 $SEND .= "Subject: =?utf-8?b?" . base64_encode( $data["subject"] ) . "?=\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
243 $SEND .= "Content-Type: multipart/mixed; boundary=\"{$boundary}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
244 $SEND .= "\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
245 /* end headers */
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
246
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
247 /* Move images to appendix */
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
248 $email_images = array();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
249 $body2 = preg_replace_callback( '/<img +src="([^"]+)"/u', "cms_email_callback1", $data["email_body"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
250
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
251 if ( empty( $data["type"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
252 $type = "text/plain";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
253 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
254 $type = $data["type"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
255 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
256
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
257 $SEND .= "--{$boundary}\r\nContent-Type: multipart/related; boundary=\"{$boundary_id}\"\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
258 $SEND .= "--{$boundary_id}\r\nContent-Type: {$type}; charset=utf-8;\r\nContent-Transfer-Encoding: base64\r\n\r\n" . chunk_split( base64_encode( $body2 ) ) . "\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
259
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
260 foreach( $email_images as $ind => $image ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
261 $SEND .= "--{$boundary_id}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
262 $SEND .= "Content-Type: image/{$image['ext']}; name=\"{$ind}.{$image['ext']}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
263 $SEND .= "Content-ID: <{$ind}.{$image['ext']}>\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
264 $SEND .= "Content-Disposition: inline; filename=\"{$ind}.{$image['ext']}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
265 $SEND .= "Content-transfer-encoding: base64\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
266 $SEND .= chunk_split( $image['base64'] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
267 $SEND .= "\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
268 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
269
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
270 if ( isset( $data["files"] ) && is_array( $data["files"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
271 foreach( $data["files"] as $file ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
272 $mime = mime_content_type( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
273 $name = preg_replace( "/.*\//u", "", $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
274 $SEND .= "--{$boundary_id}\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
275 $SEND .= "Content-Type: {$mime}; name=\"{$name}\"\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
276 $SEND .= "Content-Transfer-Encoding: base64\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
277 $SEND .= "Content-Disposition: attachment; filename=\"{$name}\"\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
278 $SEND .= chunk_split( base64_encode( file_get_contents( $file ) ) ) . "\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
279 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
280 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
281
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
282 $SEND .= "--{$boundary_id}--\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
283 $SEND .= "--{$boundary}--\r\n\r\n";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
284
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
285 $debug_file = "{$cms['cms_dir']}/smtp_debug.txt";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
286 cms_debug( $debug_file, "\n---" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
287
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
288 // Connect
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
289 cms_debug( $debug_file, "fsockopen {$data['smtp_host']} {$data['smtp_port']}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
290 $socket = fsockopen( $data["smtp_host"], $data["smtp_port"], $errno, $errstr, 10 ); // 10 sec timeout
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
291 if( $socket === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
292 cms_debug( $debug_file, "fsockopen error {$errno} {$errstr}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
293 return "{$errno} {$errstr}";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
294 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
295 cms_debug( $debug_file, "fsockopen ok" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
296
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
297 stream_set_timeout( $socket, 3 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
298
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
299 // Receive data after connection
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
300 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
301 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
302 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
303 if ( substr( $r, 0, 3 ) === "220" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
304 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
305 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
306 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
307 return $r;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
308 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
309
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
310 // HELLO
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
311 cms_debug( $debug_file, "ME: EHLO {$_SERVER['SERVER_NAME']}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
312 fputs( $socket, "EHLO {$_SERVER['SERVER_NAME']}\r\n");
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
313
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
314 // Receive data after HELLO
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
315 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
316 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
317 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
318 if ( preg_match( '/250.AUTH/', $r ) ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
319 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
320 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
321 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
322 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
323 cms_debug( $debug_file, "The server does not greet us." );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
324 return $r."\nThe server does not greet us.";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
325 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
326
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
327 // AUTH
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
328 cms_debug( $debug_file, "ME: AUTH LOGIN" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
329 fputs( $socket, "AUTH LOGIN\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
330
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
331 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
332 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
333 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
334 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
335 if ( substr( $r, 0, 3 ) === "334" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
336 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
337 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
338 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
339 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
340 cms_debug( $debug_file, "Can't find the answer to the authorization request." );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
341 return "Can't find the answer to the authorization request.";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
342 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
343
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
344 // Send login
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
345 cms_debug( $debug_file, "ME: base64_encode( smtp_login )" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
346 fputs( $socket, base64_encode( $data["smtp_login"] ) . "\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
347
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
348 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
349 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
350 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
351 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
352 if ( substr( $r, 0, 3 ) === "334" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
353 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
354 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
355 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
356 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
357 cms_debug( $debug_file, "The authorization login was not accepted by the server." );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
358 return "The authorization login was not accepted by the server.";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
359 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
360
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
361 // Send password
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
362 cms_debug( $debug_file, "ME: base64_encode( smtp_password )" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
363 fputs( $socket, base64_encode( $data["smtp_password"] ) . "\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
364
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
365 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
366 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
367 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
368 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
369 if ( substr( $r, 0, 3 ) === "235" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
370 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
371 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
372 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
373 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
374 cms_debug( $debug_file, "The password was not accepted by the server as correct." );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
375 return "The password was not accepted by the server as correct.";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
376 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
377
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
378 // Send FROM
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
379 cms_debug( $debug_file, "ME: MAIL FROM: <{$data['from_email']}>" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
380 fputs( $socket, "MAIL FROM: <{$data['from_email']}>\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
381
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
382 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
383 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
384 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
385 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
386 if ( substr( $r, 0, 3 ) === "250" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
387 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
388 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
389 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
390 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
391 cms_debug( $debug_file, "Can't send command MAIL FROM" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
392 return "Can't send command MAIL FROM";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
393 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
394
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
395 // Send recipient
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
396 cms_debug( $debug_file, "ME: RCPT TO: <{$data['to_email']}>" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
397 fputs( $socket, "RCPT TO: <{$data['to_email']}>\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
398
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
399 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
400 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
401 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
402 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
403 if ( substr( $r, 0, 3 ) === "250" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
404 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
405 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
406 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
407 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
408 cms_debug( $debug_file, "Can't send RCPT TO command" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
409 return "Can't send RCPT TO command";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
410 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
411
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
412 // BCC
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
413 if ( ! empty( $data["bcc"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
414 cms_debug( $debug_file, "ME (bcc): RCPT TO: <{$data['bcc']}>" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
415 fputs( $socket, "RCPT TO: {$data['bcc']}\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
416
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
417 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
418 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
419 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
420 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
421 if ( substr( $r, 0, 3 ) === "250" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
422 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
423 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
424 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
425 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
426 cms_debug( $debug_file, "Can't send RCPT TO (bcc) command" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
427 return "Can't send RCPT TO (bcc) command";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
428 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
429 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
430
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
431 // Email body command
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
432 cms_debug( $debug_file, "ME: DATA" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
433 fputs( $socket, "DATA\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
434
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
435 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
436 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
437 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
438 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
439 if ( substr( $r, 0, 3 ) === "354" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
440 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
441 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
442 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
443 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
444 cms_debug( $debug_file, "Can't send DATA command" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
445 return "Can't send DATA command";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
446 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
447
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
448 // Send email body
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
449 cms_debug( $debug_file, "ME SEND DATA" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
450 fputs( $socket, "{$SEND}\r\n.\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
451
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
452 // Receive data
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
453 $ok = false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
454 while ( $r = fgets( $socket, 1000 ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
455 cms_debug( $debug_file, "SERVER: {$r}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
456 if ( substr( $r, 0, 3 ) === "250" ) { $ok = true; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
457 if ( substr( $r, 3, 1 ) === " " ) { break; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
458 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
459 if ( $ok === false ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
460 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
461 cms_debug( $debug_file, "I can not send the body of the letter." );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
462 return "I can not send the body of the letter.";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
463 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
464
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
465 // Quit command
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
466 cms_debug( $debug_file, "ME: QUIT\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
467 fputs( $socket, "QUIT\r\n" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
468 fclose( $socket );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
469 return "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
470 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
471
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
472 #endregion Функции отправки письма
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
473
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
474
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
475 function cms_debug( $debug_file, $string ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
476 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
477 if ( empty( $cms["config"]["debug"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
478 return;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
479 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
480 // Следим за размером файла
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
481 if ( is_file( $debug_file ) && filesize( $debug_file ) > 16384 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
482 rename( $debug_file, $debug_file . ".old" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
483 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
484 // Сбрасываем инфу
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
485 if ( substr( $string, -1 ) !== "\n" ) { $string .= "\n"; }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
486 file_put_contents( $debug_file, $string, FILE_APPEND );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
487 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
488
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
489
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
490 // Функция для отправки файла браузеру малыми порциями,
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
491 // чтобы не было ошибок с закончившейся памятью
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
492 function cms_readfile( $file, $headers = true ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
493 if ( file_exists( $file ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
494 /*
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
495 if (ob_get_level()) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
496 ob_end_clean();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
497 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
498 */
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
499 if ( $headers ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
500 header( "Content-Description: File Transfer" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
501 $mime = mime_content_type( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
502 header( "Content-Type: {$mime}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
503 $basename = basename( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
504 header( "Content-Disposition: attachment; filename=\"{$basename}\"" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
505 header( "Content-Transfer-Encoding: binary" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
506 header( "Expires: 0" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
507 header( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
508 header( "Pragma: public" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
509 $filesize = filesize( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
510 header( "Content-Length: {$filesize}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
511 ob_clean();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
512 flush();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
513 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
514 if ( $handle = fopen( $file, "rb" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
515 while ( ! feof( $handle ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
516 print fread( $handle, 1024 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
517 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
518 return fclose( $handle );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
519 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
520 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
521 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
522 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
523 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
524 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
525 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
526
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
527
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
528 // Принимает строку, которую нужно перевести
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
529 // и модуль ("page.mod.php") если нужно дернуть перевод из другого
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
530 function __( $string, $module = "" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
531 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
532
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
533 // Определяем вызвавший файл
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
534 $backtrace = debug_backtrace();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
535 $basename = pathinfo( $backtrace[0]["file"], PATHINFO_BASENAME );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
536 $basedir = basename( pathinfo( $backtrace[0]["file"], PATHINFO_DIRNAME ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
537 if ( $module === "" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
538 $module = $basename;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
539 // Автовыбор модуля для шаблона админки
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
540 if ( $basedir === "admin.cms" && $basename === "html.php" ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
541 $module = "admin.mod.php";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
542 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
543 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
544
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
545 // Загрузка файла перевода если еще не загружен
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
546 if ( ! isset( $cms["lang"][$module][ $cms["config"]["locale"] ] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
547 $file = $cms["cms_dir"] . "/lang/" . $cms["config"]["locale"] . "/" . $module;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
548 if ( is_file( $file ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
549 include_once( $file );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
550 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
551 $cms["lang"][$module][ $cms["config"]["locale"] ] = array();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
552 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
553 // load translit
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
554 if ( ! isset( $cms["tr"] ) ) $cms["tr"] = array();
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
555 $translit = $cms["cms_dir"] . "/lang/" . $cms["config"]["locale"] . "/translit.php";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
556 if ( is_file( $translit ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
557 include_once( $translit );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
558 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
559 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
560
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
561 // Translate
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
562 if ( isset( $cms["lang"][$module][ $cms["config"]["locale"] ][$string] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
563 return $cms["lang"][$module][ $cms["config"]["locale"] ][$string];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
564 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
565 // Чтобы узнать какие переводы отсутствуют, нужно включить отладку в config.php
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
566 // $cms["config"]["debug"] = true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
567 // Результаты буду в файле .cms/debug.log.php
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
568 if ( ! empty( $cms["config"]["debug"] ) && empty( $cms["debug"]["translate"][$string] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
569 $line = $backtrace[0]["line"];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
570 $t = "translate to {$cms["config"]["locale"]}";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
571 $f = "{$basename}:{$line}";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
572 $cms["debug"][$t][$f] = $string;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
573 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
574 return $string;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
575 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
576 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
577
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
578
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
579 function cms_translit( $string, $trim_dash = true ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
580 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
581 $tr1 = strtr( $string, $cms["tr"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
582 $tr2 = strtr( $tr1, array( " " => "-" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
583 $tr3 = preg_replace( "/[^-A-Za-z0-9_]+/u", "", $tr2 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
584 if ( $trim_dash ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
585 $tr3 = trim( $tr3, "-_" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
586 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
587 return $tr3;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
588 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
589
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
590
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
591 function cms_translit_file( $string ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
592 global $cms;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
593 $tr1 = strtr( $string, $cms["tr"] );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
594 $tr2 = strtr( $tr1, array( " " => "_" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
595 $tr3 = preg_replace( "/[^-A-Za-z0-9_]+/u", "", $tr2 );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
596 return $tr3;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
597 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
598
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
599
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
600 // Вспомогательная функция для последующей cms_asort()
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
601 function cms_uasort( $a, $b ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
602 if ( ! isset( $a["sort"] ) || ! isset( $b["sort"] ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
603 return 0;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
604 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
605 if ( $a["sort"] <= $b["sort"] ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
606 return -1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
607 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
608 return 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
609 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
610 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
611 // Сортирует массив из элементов, которые тоже являются массивами
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
612 // и содержат ключ sort
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
613 function cms_asort( &$array ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
614 if ( ! is_array( $array ) ) return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
615 return uasort( $array, "cms_uasort" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
616 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
617
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
618
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
619 // Рекурсивное удаление папок
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
620 function recurse_rm( $src ) /* bool */ {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
621 if ( ! is_dir( $src ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
622 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
623 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
624 $dir = opendir( $src );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
625 // readdir может вернуть аналог false, поэтому строгая проверка
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
626 while( false !== ( $file = readdir( $dir ) ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
627 if ( ( $file != "." ) && ( $file != ".." ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
628 if ( is_dir( "{$src}/{$file}" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
629 recurse_rm( "{$src}/{$file}" );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
630 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
631 if ( ! unlink( "{$src}/{$file}" ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
632 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
633 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
634 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
635 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
636 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
637 closedir( $dir );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
638 return rmdir( $src );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
639 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
640
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
641
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
642 function is_email( $str ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
643 return preg_match( "/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,9})(\]?)$/", $str );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
644 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
645
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
646
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
647 // Returns a file size limit in bytes based on the PHP upload_max_filesize
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
648 // and post_max_size
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
649 function file_upload_max_size() {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
650 $max_size = -1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
651
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
652 if ( $max_size < 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
653 // Start with post_max_size.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
654 $post_max_size = parse_size( ini_get( "post_max_size" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
655 if ( $post_max_size > 0 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
656 $max_size = $post_max_size;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
657 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
658
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
659 // If upload_max_size is less, then reduce. Except if upload_max_size is
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
660 // zero, which indicates no limit.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
661 $upload_max = parse_size( ini_get( "upload_max_filesize" ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
662 if ( $upload_max > 0 && $upload_max < $max_size ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
663 $max_size = $upload_max;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
664 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
665 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
666 return $max_size;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
667 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
668
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
669
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
670 function parse_size( $size ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
671 $unit = preg_replace( "/[^bkmgtpezy]/i", "", $size ); // Remove the non-unit characters from the size.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
672 $size = preg_replace( "/[^0-9\.]/", "", $size ); // Remove the non-numeric characters from the size.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
673 if ( $unit ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
674 // Find the position of the unit in the ordered string which is the power of magnitude to multiply a kilobyte by.
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
675 return round( $size * pow( 1024, stripos( "bkmgtpezy", $unit[0] ) ) );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
676 } else {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
677 return round( $size );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
678 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
679 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
680
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
681
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
682 // Возвращает true только если это пустая папка
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
683 function is_dir_and_empty( $dir ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
684 if ( ! is_dir( $dir ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
685 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
686 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
687 $handle = opendir( $dir );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
688 while ( false !== ( $entry = readdir( $handle ) ) ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
689 if ( $entry != "." && $entry != ".." ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
690 closedir( $handle );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
691 return false;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
692 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
693 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
694 closedir( $handle );
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
695 return true;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
696 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
697
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
698
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
699 // Генерация uid для всяких нужд
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
700 function cms_admin_pass_gen( $count = 8 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
701 $chars = "0123456789AaBbCcDdEeFfGgHhiJjKkLMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
702 $strlen = strlen( $chars ) - 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
703 $password = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
704 while ( $count-- ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
705 $password .= $chars[ rand( 0, $strlen ) ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
706 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
707 return $password;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
708 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
709
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
710
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
711 // Генерация uid для всяких нужд
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
712 function cms_uid( $count = 8 ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
713 $chars = "0123456789AaBbCcDdEeFfGgHhiJjKkLMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
714 $strlen = strlen( $chars ) - 1;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
715 $password = "";
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
716 while ( $count-- ) {
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
717 $password .= $chars[ rand( 0, $strlen ) ];
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
718 }
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
719 return $password;
Coffee CMS <info@coffee-cms.ru>
parents:
diff changeset
720 }