<?php
/*
 * You may not change or alter any portion of this comment or credits
 * of supporting developers from this source code or any supporting source code
 * which is considered copyrighted (c) material of the original comment or credit authors.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */

/**
 * @copyright    XOOPS Project http://xoops.org/
 * @license      GNU GPL 2 or later (http://www.gnu.org/licenses/gpl-2.0.html)
 * @package
 * @since
 * @author       XOOPS Development Team, Kazumi Ono (AKA onokazu)
 */

// Check users rights
if (!is_object($xoopsUser) || !is_object($xoopsModule) || !$xoopsUser->isAdmin($xoopsModule->mid())) {
    exit(_NOPERM);
}
//  Check is active
if (!xoops_getModuleOption('active_mailusers', 'system')) {
    redirect_header('admin.php', 2, _AM_SYSTEM_NOTACTIVE);
}

// Parameters
$limit = 100;
// Get Action type
$op = system_CleanVars($_REQUEST, 'op', 'list', 'string');
// Define main template
$GLOBALS['xoopsOption']['template_main'] = 'system_mailusers.tpl';
// Call Header
xoops_cp_header();
// Define Stylesheet
$xoTheme->addStylesheet(XOOPS_URL . '/modules/system/css/admin.css');
$xoTheme->addScript('browse.php?Frameworks/jquery/jquery.js');
$xoTheme->addScript('modules/system/js/admin.js');

switch ($op) {

    case 'list':
    default:
        // Define Breadcrumb and tips
        $xoBreadCrumb->addLink(_AM_SYSTEM_MAILUSERS_MANAGER, system_adminVersion('mailusers', 'adminpath'));
        $xoBreadCrumb->addHelp(system_adminVersion('mailusers', 'help'));
        $xoBreadCrumb->render();

        $display_criteria = 1;
        $form             = new XoopsThemeForm(_AM_SYSTEM_MAILUSERS_LIST, 'mailusers', 'admin.php?fct=mailusers', 'post', true);
        if (!empty($_POST['memberslist_id'])) {
            $user_count    = count($_POST['memberslist_id']);
            $display_names = '';
            for ($i = 0; $i < $user_count; ++$i) {
                $uid_hidden = new XoopsFormHidden('mail_to_user[]', $_POST['memberslist_id'][$i]);
                $form->addElement($uid_hidden);
                $display_names .= "<a href='" . XOOPS_URL . '/userinfo.php?uid=' . $_POST['memberslist_id'][$i] . "' rel='external'>" . XoopsUser::getUnameFromId($_POST['memberslist_id'][$i]) . '</a>, ';
                unset($uid_hidden);
            }
            $users_label = new XoopsFormLabel(_AM_SYSTEM_MAILUSERS_SENDTOUSERS2, substr($display_names, 0, -2));
            $form->addElement($users_label);
            $display_criteria = 0;
        }
        if (!empty($display_criteria)) {
            $selected_groups = array();
            $group_select    = new XoopsFormSelectGroup('<div class="bold spacer">' . _AM_SYSTEM_MAILUSERS_GROUPIS . '<span class="bold green">*</span></div>', 'mail_to_group', false, $selected_groups, 5, true);

            $lastlog_min = new XoopsFormTextDateSelect(_AM_SYSTEM_MAILUSERS_LASTLOGMIN . '<span class="bold green">*</span>', 'mail_lastlog_min');
            $lastlog_min->setValue('');
            $lastlog_max = new XoopsFormTextDateSelect(_AM_SYSTEM_MAILUSERS_LASTLOGMAX . '<span class="bold green">*</span>', 'mail_lastlog_max');
            $lastlog_max->setValue('');

            $date = new XoopsFormElementTray('<div class="bold spacer">' . _AM_SYSTEM_MAILUSERS_DATE . '</div>', '');
            $date->addElement($lastlog_min);
            $date->addElement($lastlog_max);

            $idle_more = new XoopsFormText(_AM_SYSTEM_MAILUSERS_IDLEMORE . '<span class="bold green">*</span>', 'mail_idle_more', 10, 5);
            $idle_less = new XoopsFormText(_AM_SYSTEM_MAILUSERS_IDLELESS . '<span class="bold green">*</span>', 'mail_idle_less', 10, 5);

            $idle = new XoopsFormElementTray('<div class="bold spacer">' . _AM_SYSTEM_MAILUSERS_DAY . '</div>', '');
            $idle->addElement($idle_more);
            $idle->addElement($idle_less);

            $regd_min = new XoopsFormTextDateSelect(_AM_SYSTEM_MAILUSERS_REGDMIN . '<span class="bold green">*</span>', 'mail_regd_min');
            $regd_min->setValue('');
            $regd_max = new XoopsFormTextDateSelect(_AM_SYSTEM_MAILUSERS_REGDMAX . '<span class="bold green">*</span>', 'mail_regd_max');
            $regd_max->setValue('');

            $regdate = new XoopsFormElementTray('<div class="bold spacer">' . _AM_SYSTEM_MAILUSERS_REGDATE . '</div>', '');
            $regdate->addElement($regd_min);
            $regdate->addElement($regd_max);

            $mailok_cbox = new XoopsFormCheckBox('', 'mail_mailok');
            $mailok_cbox->addOption(1, _AM_SYSTEM_MAILUSERS_MAILOK . '<span class="bold green">*</span>');
            $inactive_cbox = new XoopsFormCheckBox('', 'mail_inactive');
            $inactive_cbox->addOption(1, _AM_SYSTEM_MAILUSERS_INACTIVE . '<span class="bold green">*</span>');
            $inactive_cbox->setExtra("onclick='javascript:disableElement(\"mail_lastlog_min\");disableElement(\"mail_lastlog_max\");disableElement(\"mail_idle_more\");disableElement(\"mail_idle_less\");disableElement(\"mail_to_group[]\");'");
            $criteria_tray = new XoopsFormElementTray(_AM_SYSTEM_MAILUSERS_SENDTOUSERS, '<br><br>');
            $criteria_tray->setDescription('<span class="bold green">*</span>' . _AM_SYSTEM_MAILUSERS_OPTIONAL);
            $criteria_tray->addElement($group_select);
            //$criteria_tray->addElement($lastlog);
            $criteria_tray->addElement($date);
            //$criteria_tray->addElement($lastlog_max);
            $criteria_tray->addElement($idle);
            //$criteria_tray->addElement($idle_less);
            $criteria_tray->addElement($regdate);

            $criteria_tray->addElement($mailok_cbox);
            $criteria_tray->addElement($inactive_cbox);

            //$criteria_tray->addElement($regd_max);
            $form->addElement($criteria_tray);
        }
        $fname_text      = new XoopsFormText(_AM_SYSTEM_MAILUSERS_MAILFNAME, 'mail_fromname', 30, 255, htmlspecialchars($xoopsConfig['sitename'], ENT_QUOTES));
        $fromemail       = !empty($xoopsConfig['adminmail']) ? $xoopsConfig['adminmail'] : $xoopsUser->getVar('email', 'E');
        $femail_text     = new XoopsFormText(_AM_SYSTEM_MAILUSERS_MAILFMAIL, 'mail_fromemail', 30, 255, $fromemail);
        $subject_caption = _AM_SYSTEM_MAILUSERS_MAILSUBJECT . "<br><br><span style='font-size:x-small;font-weight:bold;'>" . _AM_SYSTEM_MAILUSERS_MAILTAGS . "</span><br><span style='font-size:x-small;font-weight:normal;'>" . _AM_SYSTEM_MAILUSERS_MAILTAGS2 . '</span>';
        $subject_text    = new XoopsFormText($subject_caption, 'mail_subject', 50, 255);
        $body_caption    = _AM_SYSTEM_MAILUSERS_MAILBODY . "<br><br><span style='font-size:x-small;font-weight:bold;'>" . _AM_SYSTEM_MAILUSERS_MAILTAGS . "</span><br><span style='font-size:x-small;font-weight:normal;'>" . _AM_SYSTEM_MAILUSERS_MAILTAGS1 . '<br>' . _AM_SYSTEM_MAILUSERS_MAILTAGS2 . '<br>' . _AM_SYSTEM_MAILUSERS_MAILTAGS3 . '<br>' . _AM_SYSTEM_MAILUSERS_MAILTAGS4 . '</span>';
        $body_text       = new XoopsFormTextArea($body_caption, 'mail_body', '', 10);
        $to_checkbox     = new XoopsFormCheckBox(_AM_SYSTEM_MAILUSERS_SENDTO, 'mail_send_to', 'mail');
        $to_checkbox->addOption('mail', _AM_SYSTEM_MAILUSERS_EMAIL);
        $to_checkbox->addOption('pm', _AM_SYSTEM_MAILUSERS_PM);
        $start_hidden  = new XoopsFormHidden('mail_start', 0);
        $op_hidden     = new XoopsFormHidden('op', 'send');
        $submit_button = new XoopsFormButton('', 'mail_submit', _SEND, 'submit');

        $form->addElement($fname_text);
        $form->addElement($femail_text);
        $form->addElement($subject_text);
        $form->addElement($body_text);
        $form->addElement($to_checkbox);
        $form->addElement($op_hidden);
        $form->addElement($start_hidden);
        $form->addElement($submit_button);
        $form->setRequired($subject_text);
        $form->setRequired($body_text);
        // Assign form
        $xoopsTpl->assign('form', $form->render());
        break;

    // Send
    case 'send':
        // Define Breadcrumb and tips

        $xoBreadCrumb->addLink(_AM_SYSTEM_MAILUSERS_MANAGER, system_adminVersion('mailusers', 'adminpath'));
        $xoBreadCrumb->addLink(_AM_SYSTEM_MAILUSERS_LIST);
        $xoBreadCrumb->render();

        if (!empty($_POST['mail_send_to'])) {
            $added          = array();
            $added_id       = array();
            $criteria       = array();
            $count_criteria = 0; // user count via criteria;
            if (!empty($_POST['mail_inactive'])) {
                $criteria[] = 'level = 0';
            } else {
                if (!empty($_POST['mail_mailok'])) {
                    $criteria[] = 'user_mailok = 1';
                }
                if (!empty($_POST['mail_lastlog_min'])) {
                    $time = strtotime(trim($_POST['mail_lastlog_min']));
                    if ($time > 0) {
                        $criteria[] = "last_login > $time";
                    }
                }
                if (!empty($_POST['mail_lastlog_max'])) {
                    $time = strtotime(trim($_POST['mail_lastlog_max']));
                    if ($time > 0) {
                        $criteria[] = "last_login < $time";
                    }
                }
                if (!empty($_POST['mail_idle_more']) && is_numeric($_POST['mail_idle_more'])) {
                    $f_mail_idle_more = (int)trim($_POST['mail_idle_more']);
                    $time             = 60 * 60 * 24 * $f_mail_idle_more;
                    $time             = time() - $time;
                    if ($time > 0) {
                        $criteria[] = "last_login < $time";
                    }
                }
                if (!empty($_POST['mail_idle_less']) && is_numeric($_POST['mail_idle_less'])) {
                    $f_mail_idle_less = (int)trim($_POST['mail_idle_less']);
                    $time             = 60 * 60 * 24 * $f_mail_idle_less;
                    $time             = time() - $time;
                    if ($time > 0) {
                        $criteria[] = "last_login > $time";
                    }
                }
            }
            if (!empty($_POST['mail_regd_min'])) {
                $time = strtotime(trim($_POST['mail_regd_min']));
                if ($time > 0) {
                    $criteria[] = "user_regdate > $time";
                }
            }
            if (!empty($_POST['mail_regd_max'])) {
                $time = strtotime(trim($_POST['mail_regd_max']));
                if ($time > 0) {
                    $criteria[] = "user_regdate < $time";
                }
            }
            if (!empty($criteria) || !empty($_POST['mail_to_group'])) {
                $criteria_object = new CriteriaCompo();
                $criteria_object->setStart(@$_POST['mail_start']);
                $criteria_object->setLimit($limit);
                foreach ($criteria as $c) {
                    list($field, $op, $value) = explode(' ', $c);
                    $crit         = new Criteria($field, $value, $op);
                    $crit->prefix = 'u';
                    $criteria_object->add($crit, 'AND');
                }
                /* @var XoopsMemberHandler $member_handler */
                $member_handler = xoops_getHandler('member');
                $groups         = empty($_POST['mail_to_group']) ? array() : array_map('intval', $_POST['mail_to_group']);
                $getusers       = $member_handler->getUsersByGroupLink($groups, $criteria_object, true);
                $count_criteria = $member_handler->getUserCountByGroupLink($groups, $criteria_object);
                foreach ($getusers as $getuser) {
                    if (!in_array($getuser->getVar('uid'), $added_id)) {
                        $added[]    = $getuser;
                        $added_id[] = $getuser->getVar('uid');
                    }
                }
            }
            if (!empty($_POST['mail_to_user'])) {
                foreach ($_POST['mail_to_user'] as $to_user) {
                    if (!in_array($to_user, $added_id)) {
                        $added[]    = new XoopsUser($to_user);
                        $added_id[] = $to_user;
                    }
                }
            }
            $added_count = count($added);

            //openTable();
            if ($added_count > 0) {
                $myts        = MyTextSanitizer::getInstance();
                $xoopsMailer =& xoops_getMailer();
                for ($i = 0; $i < $added_count; ++$i) {
                    $xoopsMailer->setToUsers($added[$i]);
                }
                $xoopsMailer->setFromName($myts->stripSlashesGPC($_POST['mail_fromname']));
                $xoopsMailer->setFromEmail($myts->stripSlashesGPC($_POST['mail_fromemail']));
                $xoopsMailer->setSubject($myts->stripSlashesGPC($_POST['mail_subject']));
                $xoopsMailer->setBody($myts->stripSlashesGPC($_POST['mail_body']));
                if (in_array('mail', $_POST['mail_send_to'])) {
                    $xoopsMailer->useMail();
                }
                if (in_array('pm', $_POST['mail_send_to']) && empty($_POST['mail_inactive'])) {
                    $xoopsMailer->usePM();
                }
                $xoopsMailer->send(true);
                $xoopsTpl->assign('Sucess', $xoopsMailer->getSuccess());
                $xoopsTpl->assign('Errors', $xoopsMailer->getErrors());
                //echo $xoopsMailer->getSuccess();
                //echo $xoopsMailer->getErrors();

                if ($count_criteria > $limit) {
                    $form = new XoopsThemeForm(_AM_SYSTEM_MAILUSERS_LIST, 'mailusers', 'admin.php?fct=mailusers', 'post', true);
                    if (!empty($_POST['mail_to_group'])) {
                        foreach ($_POST['mail_to_group'] as $mailgroup) {
                            $group_hidden = new XoopsFormHidden('mail_to_group[]', $mailgroup);
                            $form->addElement($group_hidden);
                        }
                    }
                    $inactive_hidden    = new XoopsFormHidden('mail_inactive', @$_POST['mail_inactive']);
                    $lastlog_min_hidden = new XoopsFormHidden('mail_lastlog_min', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_lastlog_min'])));
                    $lastlog_max_hidden = new XoopsFormHidden('mail_lastlog_max', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_lastlog_max'])));
                    $regd_min_hidden    = new XoopsFormHidden('mail_regd_min', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_regd_min'])));
                    $regd_max_hidden    = new XoopsFormHidden('mail_regd_max', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_regd_max'])));
                    $idle_more_hidden   = new XoopsFormHidden('mail_idle_more', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_idle_more'])));
                    $idle_less_hidden   = new XoopsFormHidden('mail_idle_less', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_idle_less'])));
                    $fname_hidden       = new XoopsFormHidden('mail_fromname', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_fromname'])));
                    $femail_hidden      = new XoopsFormHidden('mail_fromemail', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_fromemail'])));
                    $subject_hidden     = new XoopsFormHidden('mail_subject', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_subject'])));
                    $body_hidden        = new XoopsFormHidden('mail_body', $myts->htmlSpecialChars($myts->stripSlashesGPC($_POST['mail_body'])));
                    $start_hidden       = new XoopsFormHidden('mail_start', $_POST['mail_start'] + $limit);
                    $mail_mailok_hidden = new XoopsFormHidden('mail_mailok', $myts->htmlSpecialChars($myts->stripSlashesGPC(@$_POST['mail_mailok'])));
                    $op_hidden          = new XoopsFormHidden('op', 'send');
                    $submit_button      = new XoopsFormButton('', 'mail_submit', _AM_SYSTEM_MAILUSERS_SENDNEXT, 'submit');
                    $sent_label         = new XoopsFormLabel(_AM_SYSTEM_MAILUSERS_SENT, sprintf(_AM_SYSTEM_MAILUSERS_SENTNUM, $_POST['mail_start'] + 1, $_POST['mail_start'] + $limit, $count_criteria + $added_count - $limit));
                    $form->addElement($sent_label);
                    $form->addElement($inactive_hidden);
                    $form->addElement($lastlog_min_hidden);
                    $form->addElement($lastlog_max_hidden);
                    $form->addElement($regd_min_hidden);
                    $form->addElement($regd_max_hidden);
                    $form->addElement($idle_more_hidden);
                    $form->addElement($idle_less_hidden);
                    $form->addElement($fname_hidden);
                    $form->addElement($femail_hidden);
                    $form->addElement($subject_hidden);
                    $form->addElement($body_hidden);
                    $form->addElement($op_hidden);
                    $form->addElement($start_hidden);
                    $form->addElement($mail_mailok_hidden);
                    if (isset($_POST['mail_send_to']) && is_array($_POST['mail_send_to'])) {
                        foreach ($_POST['mail_send_to'] as $v) {
                            $form->addElement(new XoopsFormHidden('mail_send_to[]', $v));
                        }
                    } else {
                        $to_hidden = new XoopsFormHidden('mail_send_to', 'mail');
                        $form->addElement($to_hidden);
                    }
                    $form->addElement($submit_button);
                    $form->display();
                } else {
                    echo '<h4>' . _AM_SYSTEM_MAILUSERS_SENDCOMP . '</h4>';
                }
            } else {
                echo '<h4>' . _AM_SYSTEM_MAILUSERS_NOUSERMATCH . '</h4>';
            }
        }
        break;
}
// Call Footer
xoops_cp_footer();
