attachments) > 0 and !isset($_POST['mailing_action'])) $mailing_lost_attachments = true; } mailing_onload(); mailing_check_post(); } function mailing_check_plugins() { global $xinha4wp_loaded, $deans_fckeditor_loaded; $current_plugins = get_option('active_plugins'); if(is_array($current_plugins)) { foreach ($current_plugins as $plugin) { if(preg_match("/xinha4wp/i", $plugin) and get_option('wpx_posts_enabled')) $xinha4wp_loaded = true; if(preg_match("/deans_fckeditor/i", $plugin)) $deans_fckeditor_loaded = true; } } } function mailing_handle_email() { global $mailing_obj, $msg, $mailing_tmp_dir, $mailing_sent_info; // if($mailing_obj == NULL) $mailing_obj = new mailing_email(); $sendok = ($_POST['mailing_sendmessage'] == 'true'); $dontsend = false; $msg = ''; $eml = array("from" => empty($_POST['mailing_from']) ? mailing_get_setting('mailing_default_sender') : $_POST['mailing_from'], "replyto" => empty($_POST['default_replyto']) ? mailing_get_setting('mailing_default_replyto') : $_POST['default_replyto'], "mailing_to" => empty($_POST['mailing_to']) ? '' : $_POST['mailing_to'], "to" => '', "cc" => empty($_POST['mailing_cc']) ? '' : $_POST['mailing_cc'], "cco" => empty($_POST['mailing_cco']) ? '' : $_POST['mailing_cco'], "subject" => empty($_POST['mailing_subject']) ? mailing_get_setting('mailing_default_subject') : $_POST['mailing_subject'], "body" => empty($_POST['mailing_content']) ? '' : $_POST['mailing_content']); $mailing_obj->set_fields($eml); $mailing_obj->selected_content_id = $_POST['selected_post']; $_attnames = $mailing_obj->attnames(); if($sendok) { if(empty($mailing_obj->from) || empty($mailing_obj->mailing_to) || empty($mailing_obj->subject) || empty($mailing_obj->body)) { $msg = __('The fields From, To, Subject and Body are required.', 'mailing'); $dontsend = true; } if(!$dontsend) { $mailing_sent_info = $mailing_obj->mailing_send(); } elseif(empty($msg)) $msg = __('Your e-mail could not be sent, an error has occurred.', 'mailing'); } else { if($_POST['mailing_sendmessage'] == 'false') { // attach file if(!empty($_FILES['mailing_attfile']) and empty($_POST['mailing_attachment'])) { if(!in_array($_FILES['mailing_attfile']['name'], $_attnames)) { if(!$mailing_obj->attach($_FILES['mailing_attfile'])) $msg = __('The file could not be added, an error has occurred.', 'mailing'); } } // detach file if(!empty($_POST['mailing_attachment'])) { if(in_array($_POST['mailing_attachment'], $_attnames)) { if(!$mailing_obj->detach($_POST['mailing_attachment'])) $msg = __('The file could not be removed, an error has occurred.', 'mailing'); } } } elseif($_POST['mailing_sendmessage'] == 'discard_att') { $mailing_obj->empty_att_var(); $msg = ''; } elseif($_POST['mailing_sendmessage'] == 'continue') { $msg = ''; } } } function mailing_check_post() { global $msg, $mailing_obj; array_walk(&$_POST, 'mailing_clear_empty'); if(empty($_POST['mailing_action']) and (empty($_POST['action']) or !preg_match("/^(apply|remove)_group$/", $_POST['action']))) return; $act = !empty($_POST['action']) ? $_POST['action'] : $_POST['mailing_action']; switch($act) { case 'define_settings': update_option('mailing_float_panel', empty($_POST['float_options_panel']) ? 'off' : 'on'); update_option('mailing_show_pages', empty($_POST['show_pages']) ? 'off' : 'on'); update_option('mailing_preserve_info', $_POST['preserve_info']); if(!empty($_POST['default_from'])) update_option('mailing_default_sender', $_POST['default_from']); if(!empty($_POST['default_subject'])) update_option('mailing_default_subject', $_POST['default_subject']); if(!empty($_POST['dropdown_lines'])) update_option('mailing_dropdown_size', $_POST['dropdown_lines']); if(!empty($_POST['dropdown_user_type'])) update_option('mailing_dropdown_type', $_POST['dropdown_user_type']); if(!empty($_POST['default_replyto'])) update_option('mailing_default_replyto', $_POST['default_replyto']); if(!empty($_POST['mail_encoding'])) update_option('mailing_encoding', $_POST['mail_encoding']); if(!empty($_POST['add_content_size'])) update_option('mailing_content_size', $_POST['add_content_size']); $msg = __('Settings successfully defined', 'mailing'); break; case 'apply_group': $grp = $_POST['grpadd']; case 'remove_group': if(!isset($grp)) $grp = $_POST['grprem']; $msg = mailing_add_remove_group($act, $grp, $_POST['users']); break; case 'update_group': mailing_set_group_desc(); $msg = __('Group information successfully updated', 'mailing'); break; case 'delete_group': mailing_delete_group(); $msg = __('Group successfully removed', 'mailing'); break; case 'send_email': mailing_handle_email(); break; } } function mailing_onload() { global $userdata, $mailing_wp_user; mailing_get_option(); mailing_make_info(); if(!empty($_GET['user_id'])) { $mailing_wp_user = mailing_login_by_id($_GET['user_id']); } else if(function_exists('get_currentuserinfo')) { get_currentuserinfo(); $mailing_wp_user = $userdata->user_login; } } function mailing_install() { global $mailing_tmp_dir; if(!is_dir($mailing_tmp_dir)) mkdir($mailing_tmp_dir, 0777); if(!get_option('mailing_information')) add_option('mailing_information', array()); if(!get_option('mailing_groups_description')) add_option('mailing_groups_description', array()); if(!get_option('mailing_default_sender')) add_option('mailing_default_sender', ''); if(!get_option('mailing_default_replyto')) add_option('mailing_default_replyto', ''); if(!get_option('mailing_default_subject')) add_option('mailing_default_subject', ''); if(!get_option('mailing_dropdown_size')) add_option('mailing_dropdown_size', 10); if(!get_option('mailing_dropdown_type')) add_option('mailing_dropdown_type', 'email'); if(!get_option('mailing_encoding')) add_option('mailing_encoding', 'ISO-8859-1'); if(!get_option('mailing_content_size')) add_option('mailing_content_size', 5); if(!get_option('mailing_float_panel')) add_option('mailing_float_panel', 'off'); if(!get_option('mailing_show_pages')) add_option('mailing_show_pages', 'on'); if(!get_option('mailing_preserve_info')) add_option('mailing_preserve_info', 'on'); } function mailing_uninstall() { if(get_option('mailing_preserve_info') == 'on') return false; delete_option('mailing_preserve_info'); delete_option('mailing_information'); delete_option('mailing_groups_description'); delete_option('mailing_default_sender'); delete_option('mailing_default_replyto'); delete_option('mailing_default_subject'); delete_option('mailing_dropdown_size'); delete_option('mailing_dropdown_type'); delete_option('mailing_encoding'); delete_option('mailing_content_size'); delete_option('mailing_float_panel'); delete_option('mailing_show_pages'); } function mailing_get_setting($name, $notify = false) { $ret = get_option($name); return empty($ret) ? ($notify ? __('Not set', 'mailing') : '') : $ret; } function mailing_get_option() { global $mailing_user_groups, $mailing_groups_desc; $mailing_user_groups = get_option('mailing_information'); $mailing_groups_desc = get_option('mailing_groups_description'); } function mailing_update_option() { global $mailing_user_groups, $mailing_groups_desc; update_option('mailing_information', $mailing_user_groups); update_option('mailing_groups_description', $mailing_groups_desc); } function mailing_make_info() { global $mailing_info, $wpdb, $table_prefix; $wpdb->query('SELECT * FROM '.$table_prefix.'users'); $wpres = $wpdb->get_results(); foreach($wpres as $ind => $obj) { $uarr = get_userdata($obj->ID); $mailing_info[$uarr->user_login] = array( "uid" => $uarr->ID, "name" => $uarr->user_nicename, "displayname" => $uarr->display_name, "username" => $uarr->user_login, "email" => $uarr->user_email, "website" => $uarr->user_url, "level" => $uarr->user_level, "groups" => mailing_get_groups($uarr->user_login), "capabilities" => join(', ', array_keys($uarr->wp_capabilities)) ); } return $mailing_info; } function mailing_single_info($mai) { $test = preg_match("/^((.+)\s)??$/", preg_replace("/[\'\"]/", "", stripslashes($mai)), $matc); if(!$test) return false; $ret = array( "name" => empty($matc[2]) ? $matc[4] : $matc[2], "username" => $matc[4], "email" => $matc[3], "uid" => '', "website" => '', "level" => '', "groups" => '', "capabilities" => '' ); return $ret; } function mailing_set_publication($p) { if(empty($_GET['id_to_load']) or $_GET['id_to_load'] != $p->ID) return; global $mailing_loaded_post; print_r($p); } function mailing_set_user_groups($uname = '', $groups = '') { global $mailing_user_groups; if(empty($uname) or gettype($uname) == 'integer') $uname = $_REQUEST['user_login']; if(empty($groups)) $groups = $_REQUEST['groups']; if(gettype($groups) == 'array') $groups = join(",", $groups); if(empty($uname) || empty($groups)) return; mailing_get_option(); $mailing_user_groups[$uname] = $groups; mailing_update_option(); } function mailing_unset_user_groups($uname = '') { global $mailing_user_groups; if(empty($uname)) $uname = $_POST['user_login']; mailing_get_option(); if(isset($mailing_user_groups[$uname])) unset($mailing_user_groups[$uname]); mailing_update_option(); } function mailing_set_group_desc($gname = '', $ngname = '', $gdesc = '') { global $mailing_groups_desc; mailing_get_option(); if(empty($gname)) $gname = $_REQUEST['group_name']; if(empty($ngname)) $ngname = $_REQUEST['group_new_name']; if(empty($gdesc)) $gdesc = $_REQUEST['group_desc']; if($gname != $ngname) { unset($mailing_groups_desc[$gname]); mailing_update_group_name($gname, $ngname); $gname = $ngname; } $mailing_groups_desc[$gname] = $gdesc; mailing_update_option(); mailing_make_info(); } function mailing_get_group_desc($gname) { global $mailing_user_groups; if(isset($mailing_groups_desc[$gname])) return $mailing_groups_desc[$gname]; else return ''; } function mailing_update_group_name($gname, $ngname) { global $mailing_user_groups; mailing_get_option(); foreach($mailing_user_groups as $usr => $grps) { $mailing_user_groups[$usr] = preg_replace("/\b".$gname."\b/", $ngname, $grps); } mailing_update_option(); } function mailing_get_groups($login = false) { global $mailing_user_groups; if($login) { if(isset($mailing_user_groups[$login])) return $mailing_user_groups[$login]; return ''; } $ret = array(); foreach($mailing_user_groups as $grps) { $grar = preg_split("/\s*[,;\-]\s*/", $grps); foreach($grar as $gr) if(!empty($gr) and !in_array($gr, $ret)) $ret[] = $gr; } return join(", ", $ret); } function mailing_delete_group($gname = '', $users = false) { global $mailing_user_groups, $mailing_groups_desc; $gname = empty($gname) ? $_REQUEST['group_name'] : $gname; if(empty($gname)) return; mailing_get_option(); foreach($mailing_user_groups as $usr => $grps) { $grar = mailing_split_groups($grps); if((is_array($users) and !in_array($usr, $users)) || !in_array($gname, $grar)) continue; $ret = array(); foreach($grar as $gr) if(!empty($gr) and $gr != $gname) $ret[] = $gr; $mailing_user_groups[$usr] = join(", ", $ret); } if(mailing_count_group($gname) == 0) { $ret = array(); foreach($mailing_groups_desc as $grp => $desc) if($grp != $gname) $ret[$grp] = $desc; } $mailing_groups_desc = $ret; mailing_update_option(); mailing_make_info(); } function mailing_apply_group($gname = '', $users = false) { global $mailing_user_groups, $mailing_groups_desc; $gname = empty($gname) ? $_REQUEST['group_name'] : $gname; if(empty($gname)) return; mailing_get_option(); foreach($users as $un) if(!isset($mailing_user_groups[$un])) $mailing_user_groups[$un] = ''; foreach($mailing_user_groups as $usr => $grps) { $grar = mailing_split_groups($grps); if((is_array($users) and !in_array($usr, $users)) || in_array($gname, $grar)) continue; $grar[] = $gname; $mailing_user_groups[$usr] = join(", ", $grar); } mailing_update_option(); mailing_make_info(); } function mailing_split_groups($str) { $ret = array(); $arr = array_unique(preg_split("/\s*[,;\-]\s*/", $str)); foreach($arr as $i) if(!empty($i)) $ret[] = $i; return $ret; } function mailing_add_remove_group($act, $grp, $usr) { $users = mailing_login_by_id($usr); switch($act) { case "apply_group": mailing_apply_group($grp, $users); return __('The group was added', 'mailing'); break; case "remove_group": mailing_delete_group($grp, $users); return __('The group was removed', 'mailing'); break; } } function mailing_info2json() { global $mailing_info; $jsar = array(); foreach($mailing_info as $login => $root) { $jsar2 = array(); $str = "'$login': { "; foreach($root as $prop => $val) { $jsar2[] = "'$prop': '$val'"; } $str .= join(", ", $jsar2)." }"; $jsar[] = $str; } return "{ ".join(", ", $jsar)." }"; } function mailing_groups2json() { global $mailing_groups_desc; $jsar = array(); foreach($mailing_groups_desc as $grp => $desc) $jsar[] = "'$grp': '$desc'"; return "{ ".join(", ", $jsar)." }"; } function mailing_count_group($grp = '') { global $mailing_info; $ret = array(); foreach($mailing_info as $usr) { if(empty($usr['groups'])) continue; $grar = preg_split("/\s*[,;\-]\s*/", $usr['groups']); foreach($grar as $gr) { if(array_key_exists($gr, $ret)) $ret[$gr]++; else $ret[$gr] = 1; } } return empty($grp) ? $ret : (isset($ret[$grp]) ? $ret[$grp] : 0); } function mailing_login_by_id($id) { global $mailing_info; if(gettype($id) == 'array') { $ret = array(); foreach($id as $uid) if(preg_match("/^\d+$/", $uid)) $ret[] = mailing_login_by_id($uid); return $ret; } foreach($mailing_info as $usr) if($usr['uid'] == (int)$id) return $usr['username']; return __('Unknown user', 'mailing'); } function mailing_logins_by($typ, $val) { global $mailing_info; $ret = array(); foreach($mailing_info as $usr) { if($typ == "group" or $typ == "role") { $iid = $typ == "group" ? "groups" : "capabilities"; if(strstr($usr[$iid], $val)) $ret[] = $usr['username']; } elseif($typ == "user" or $typ == "level") { if($usr[$typ] == $val) $ret[] = $usr['username']; } } return $ret; } function mailing_translate_body($usr, $contid, $body) { foreach($usr as $prop => $val) $body = preg_replace("/%".$prop."\b/i", $val, $body); $pst = get_post($contid); $pst->author_name = mailing_login_by_id($pst->post_author); foreach($pst as $prop => $val) $body = preg_replace("/%".$prop."\b/i", $val, $body); return $body; } function mailing_make_add_links($str, $sep = ', ') { global $mailing_groups_desc; $arr = preg_split("/\s*[,;\-]\s*/", $str); $ret = array(); foreach($arr as $e) { $tit = empty($mailing_groups_desc[$e]) ? '' : ' title="'.$mailing_groups_desc[$e].'"'; $ret[] = "$e"; } return join($sep, $ret); } function mailing_make_to_links($func, $str, $sep = ', ') { global $mailing_groups_desc; $arr = preg_split("/\s*[,;\-]\s*/", $str); $ret = array(); foreach($arr as $e) { if($func == 'applyGroupTo') $tit = empty($mailing_groups_desc[$e]) ? '' : ' title="'.$mailing_groups_desc[$e].'"'; else $tit = ''; $ret[] = ''.$e.''; } return join($sep, $ret); } function mailing_to($tag, $cont) { return "<$tag:$cont>"; } function mailing_add_includes(){ $ok = "/(page=_mail(opts|write|groups|about)|(profile|user(s|\-edit))\.php". "|\/wp\-admin\/?(\?.+|$|index\.php))/"; if(preg_match($ok, $_SERVER['REQUEST_URI'])) { global $mailing_base_url; print "\n"; include_once "mailing.js.php"; } } function mailing_add_pages() { add_submenu_page('post.php', __('Write e-mail', 'mailing'), __('Write e-mail', 'mailing'), 8, '_mailwrite', 'mailing_write_page'); add_submenu_page('edit.php', __('Manage Groups', 'mailing'), __('Mailing Groups', 'mailing'), 8, '_mailgroups', 'mailing_groups_page'); add_submenu_page('options-general.php', __('Mailing Options', 'mailing'), __('E-mail', 'mailing'), 8, '_mailopts', 'mailing_options_page'); add_submenu_page('plugins.php', __('WPMailing', 'mailing'), __('WPMailing', 'mailing'), 8, '_mailabout', 'mailing_about_page'); } function mailing_about_page() { include "about.php"; } function mailing_write_page() { include "write.php"; } function mailing_groups_page() { include "groups.php"; } function mailing_options_page() { include "settings.php"; } function mailing_clear_empty($it) { if($it == __('Not set', 'mailing')) return $it = ''; } ?>