JAKDB_DBTYPE, "database_name" => JAKDB_NAME, "server" => JAKDB_HOST, "username" => JAKDB_USER, "password" => JAKDB_PASS, "charset" => "utf8", "port" => JAKDB_PORT, "prefix" => JAKDB_PREFIX, // [optional] driver_option for connection, read more from http://www.php.net/manual/en/pdo.setattribute.php "option" => [PDO::ATTR_CASE => PDO::CASE_NATURAL], ]); // Get the necessary classes include_once str_replace("cron/", "", $cron_url . "include/functions.php"); include_once str_replace("cron/", "", $cron_url . "class/class.browser.php"); require_once str_replace("cron/", "", $cron_url . "vendor/autoload.php"); // We need the correct url to filter either from web or cron $sapi_type = php_sapi_name(); if (substr($sapi_type, 0, 3) == "cli" || empty($_SERVER["REMOTE_ADDR"])) { $path_parts = pathinfo($cron_url); $url_filter = $cron_url; $url_replace = "/" . basename($path_parts["dirname"]) . "/"; } else { $url_filter = "/cron/"; $url_replace = "/"; } // Tables $jaktable = "support_tickets"; $jaktable1 = "tickets_answer"; $jaktable2 = "php_imap"; $ops = []; // Write the log file each time we run the ticket cron job JAK_base::jakWhatslog("System", 0, 0, 0, 38, 0, "", "Cron Job - Tickets", "cron/tickets.php", 0, "tickets"); // Get the BASE_URL if not wildcard if (!JAK_WILDCARD_SUBDOMAIN) { // We have no wildcard subdomain, just go normal $BASE_URL = (JAK_SITEHTTPS ? "https://" : "http://") . FULL_SITE_DOMAIN . SITE_SUBFOLDER . "/"; } // Select all accounts that need a welcome email. $upduser = $jakdb->select("user", ["id", "email", "username"], ["AND" => ["opid" => 0, "access" => 1]]); if (isset($upduser) && !empty($upduser) && is_array($upduser)) { foreach ($upduser as $usr) { $datasett = $jakdb->select("settings", ["varname", "used_value"], ["opid" => $usr["id"]]); foreach ($datasett as $row) { // Now check if sting contains html and do something about it! if (!empty($row["used_value"]) && strlen($row["used_value"]) != strlen(filter_var($row["used_value"], FILTER_SANITIZE_FULL_SPECIAL_CHARS))) { $defvar = htmlspecialchars($row["used_value"]); } else { $defvar = $row["used_value"]; } $ops["JAK_" . strtoupper($row["varname"]) ] = $defvar; } // Now we will need the correct URL if wildcard if (JAK_WILDCARD_SUBDOMAIN) { $subdomain = $jakdb->get("subscriptions", "business", ["opid" => $usr["id"], ]); if (isset($subdomain) && !empty($subdomain)) { // We will need to define the URL $BASE_URL = (JAK_SITEHTTPS ? "https://" : "http://") . $subdomain . "." . FULL_SITE_DOMAIN . SITE_SUBFOLDER . "/"; } else { // We have no wildcard subdomain or could not find it, just go normal $BASE_URL = (JAK_SITEHTTPS ? "https://" : "http://") . FULL_SITE_DOMAIN . SITE_SUBFOLDER . "/"; } } // Connect to the correct language include str_replace("cron/", "", $cron_url . "lang/" . $ops["JAK_LANG"] . ".php"); // Calculate which tickets we have to reminder $ticketreminder = time() - $ops["JAK_TICKET_REMINDER"] * 86400; // First check if we need to send a ticket reminder $result = $jakdb->select($jaktable, ["[>]clients" => ["clientid" => "id"]], ["support_tickets.id", "support_tickets.depid", "support_tickets.name", "support_tickets.email", "support_tickets.subject", "clients.credits", "clients.paid_until", ], ["AND" => ["support_tickets.ended" => 0, "support_tickets.reminder" => 0, "support_tickets.updated[<]" => $ticketreminder, ], ]); if (isset($result) && !empty($result)) { foreach ($result as $row) { // Dashboard URL $ticketurl = str_replace($url_filter, $url_replace, JAK_rewrite::jakParseurl($ops["JAK_SUPPORT_URL"], "t", $row["id"], JAK_rewrite::jakCleanurl($row["subject"]))); // Let's check if we have an imap $answeremail = $ticktext = ""; $check_imap = $jakdb->get($jaktable2, "emailanswer", ["depid" => $row["depid"], ]); if ($check_imap) { $answeremail = $check_imap; } // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) { foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 22 && $v["lang"] == $ops["JAK_LANG"]) { $phold = ["{url}", "{title}", "{cemail}", "{cname}", "{credits}", "{paid_until}", "{ticket}", "{subject}", "{ticketurl}", "{email}", ]; $replace = [str_replace($cron_url, "", $BASE_URL) , $ops["JAK_TITLE"], $row["email"], $row["name"], $row["credits"], $row["paid_until"], "#" . $row["id"], $row["subject"], $ticketurl, $answeremail, ]; $ticktext = str_replace($phold, $replace, $v["message"]); break; } }; } if (!empty($ticktext)) { $ticktext = '

-------------## Do Not Remove ##-------------

' . $ticktext; // Get the email template $nlhtml = file_get_contents(str_replace("cron/", "", $cron_url . "template/" . $ops["JAK_FRONT_TEMPLATE"] . "/email/index.html")); // Change fake vars into real ones. $cssAtt = ["{emailcontent}", "{weburl}", "{title}", "{emailtpllogo}", "{emailtplcopy}", ]; $cssUrl = [$ticktext, str_replace($cron_url, "", $BASE_URL) , $ops["JAK_TITLE"], $ops["JAK_EMAILTPLLOGO"], $ops["JAK_EMAILTPLCOPY"], ]; $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); $mail = new PHPMailer(); // defaults to using php "mail()" or optional SMTP if ($ops["JAK_SMTP_MAIL"] == 1) { $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = $ops["JAK_SMTPHOST"]; $mail->SMTPAuth = $ops["JAK_SMTP_AUTH"] ? true : false; // enable SMTP authentication $mail->SMTPSecure = $ops["JAK_SMTP_PREFIX"]; // sets the prefix to the server $mail->SMTPAutoTLS = false; $mail->SMTPKeepAlive = $ops["JAK_SMTP_ALIVE"] ? true : false; // SMTP connection will not close after each email sent $mail->Port = $ops["JAK_SMTPPORT"]; // set the SMTP port for the GMAIL server $mail->Username = $ops["JAK_SMTPUSERNAME"]; // SMTP account username $mail->Password = $ops["JAK_SMTPPASSWORD"]; // SMTP account password } elseif ($ops["JAK_SMTP_MAIL"] == 2) { //Tell PHPMailer to use SMTP $mail->isSMTP(); //Whether to use SMTP authentication $mail->SMTPAuth = true; //Set AuthType to use XOAUTH2 $mail->AuthType = "XOAUTH2"; $oauth_params = ["clientId" => $ops["JAK_OAUTH_CLIENTID"], "clientSecret" => $ops["JAK_OAUTH_SECRET"], ]; switch ($ops["JAK_OAUTH_PROVIDER"]) { case "Google": $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $provider = new Google($oauth_params); break; case "Yahoo": $mail->Host = "smtp.mail.yahoo.com"; $mail->Port = 465; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $provider = new Yahoo($oauth_params); break; case "Microsoft": $mail->Host = "smtp.office365.com"; $mail->Port = 587; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $provider = new Microsoft($oauth_params); break; case "Azure": $mail->Host = "smtp.office365.com"; $mail->Port = 587; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $params["tenantId"] = $ops["JAK_OAUTH_TENANTID"]; $provider = new Azure($oauth_params); break; } if ($provider) { $mail->setOAuth(new OAuth(["provider" => $provider, "clientId" => $ops["JAK_OAUTH_CLIENTID"], "clientSecret" => $ops["JAK_OAUTH_SECRET"], "refreshToken" => $ops["JAK_OAUTH_REFRESH"], "userName" => $ops["JAK_SMTP_SENDER"], ])); } } // Finally send the email $mail->SetFrom($ops["JAK_SMTP_SENDER"]); $mail->addAddress($row["email"]); $mail->Subject = $ops["JAK_TITLE"] . " - RE:" . $row["subject"]; $mail->MsgHTML($body); $mail->Send(); } // Now we update the ticket table $jakdb->update($jaktable, ["reminder" => 1], ["id" => $row["id"]]); }; } // Calculate which tickets we have to close if ($ops["JAK_TICKET_CLOSE_C"] != 0) { $ticketclose = time() - $ops["JAK_TICKET_CLOSE_C"] * 86400; // First check if we need to send a ticket reminder $result = $jakdb->select($jaktable, ["[>]clients" => ["clientid" => "id"]], ["support_tickets.id", "support_tickets.depid", "support_tickets.name", "support_tickets.email", "support_tickets.subject", "clients.credits", "clients.paid_until", ], ["AND" => ["support_tickets.ended" => 0, "support_tickets.updated[<]" => $ticketclose, ], ]); if (isset($result) && !empty($result)) { foreach ($result as $row) { // Send email to customers if set so. if ($ops["JAK_TICKET_CLOSE_R"] == 1) { // Dashboard URL $ticketurl = str_replace($url_filter, $url_replace, JAK_rewrite::jakParseurl($ops["JAK_SUPPORT_URL"], "t", $row["id"], JAK_rewrite::jakCleanurl($row["subject"]))); // Let's check if we have an imap $answeremail = $ticktext = ""; $check_imap = $jakdb->get($jaktable2, "emailanswer", ["depid" => $row["depid"], ]); if ($check_imap) { $answeremail = $check_imap; } // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) { foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 23 && $v["lang"] == $ops["JAK_LANG"]) { $phold = ["{url}", "{title}", "{cemail}", "{cname}", "{credits}", "{paid_until}", "{ticket}", "{subject}", "{ticketurl}", "{email}", ]; $replace = [str_replace($cron_url, "", $BASE_URL) , $ops["JAK_TITLE"], $row["email"], $row["name"], $row["credits"], $row["paid_until"], "#" . $row["id"], $row["subject"], $ticketurl, $answeremail, ]; $ticktext = str_replace($phold, $replace, $v["message"]); break; } }; } // Get the email template if (!empty($ticktext)) { $nlhtml = file_get_contents(str_replace("cron/", "", $cron_url . "template/" . $ops["JAK_FRONT_TEMPLATE"] . "/email/index.html")); // Change fake vars into real ones. $cssAtt = ["{emailcontent}", "{weburl}", "{title}", "{emailtpllogo}", "{emailtplcopy}", ]; $cssUrl = [$ticktext, str_replace($cron_url, "", $BASE_URL) , $ops["JAK_TITLE"], $ops["JAK_EMAILTPLLOGO"], $ops["JAK_EMAILTPLCOPY"], ]; $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); $mail = new PHPMailer(); // defaults to using php "mail()" or optional SMTP if ($ops["JAK_SMTP_MAIL"] == 1) { $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = $ops["JAK_SMTPHOST"]; $mail->SMTPAuth = $ops["JAK_SMTP_AUTH"] ? true : false; // enable SMTP authentication $mail->SMTPSecure = $ops["JAK_SMTP_PREFIX"]; // sets the prefix to the server $mail->SMTPAutoTLS = false; $mail->SMTPKeepAlive = $ops["JAK_SMTP_ALIVE"] ? true : false; // SMTP connection will not close after each email sent $mail->Port = $ops["JAK_SMTPPORT"]; // set the SMTP port for the GMAIL server $mail->Username = $ops["JAK_SMTPUSERNAME"]; // SMTP account username $mail->Password = $ops["JAK_SMTPPASSWORD"]; // SMTP account password } elseif ($ops["JAK_SMTP_MAIL"] == 2) { //Tell PHPMailer to use SMTP $mail->isSMTP(); //Whether to use SMTP authentication $mail->SMTPAuth = true; //Set AuthType to use XOAUTH2 $mail->AuthType = "XOAUTH2"; $oauth_params = ["clientId" => $ops["JAK_OAUTH_CLIENTID"], "clientSecret" => $ops["JAK_OAUTH_SECRET"], ]; switch ($ops["JAK_OAUTH_PROVIDER"]) { case "Google": $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $provider = new Google($oauth_params); break; case "Yahoo": $mail->Host = "smtp.mail.yahoo.com"; $mail->Port = 465; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $provider = new Yahoo($oauth_params); break; case "Microsoft": $mail->Host = "smtp.office365.com"; $mail->Port = 587; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $provider = new Microsoft($oauth_params); break; case "Azure": $mail->Host = "smtp.office365.com"; $mail->Port = 587; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $params["tenantId"] = $ops["JAK_OAUTH_TENANTID"]; $provider = new Azure($oauth_params); break; } if ($provider) { $mail->setOAuth(new OAuth(["provider" => $provider, "clientId" => $ops["JAK_OAUTH_CLIENTID"], "clientSecret" => $ops["JAK_OAUTH_SECRET"], "refreshToken" => $ops["JAK_OAUTH_REFRESH"], "userName" => $ops["JAK_SMTP_SENDER"], ])); } } // Finally send the email $mail->SetFrom($ops["JAK_SMTP_SENDER"]); $mail->addAddress($row["email"]); $mail->Subject = $ops["JAK_TITLE"] . " - " . sprintf($jkl["hd101"], $row["subject"]); $mail->MsgHTML($body); // Send email to customer $mail->Send(); } } // end sending closed message // Now we update the ticket table $jakdb->update($jaktable, ["ended" => time() , "status" => 3], ["id" => $row["id"]]); }; } } // Calculate which tickets we will send a rating email $ticketrating = time() - $ops["JAK_TICKET_REOPEN"] * 86400; // Send some ticket ratings emails which cannot be reopen again. $restr = $jakdb->select($jaktable, ["[>]clients" => ["clientid" => "id"]], ["support_tickets.id", "support_tickets.depid", "support_tickets.name", "support_tickets.email", "support_tickets.subject", "support_tickets.initiated", "clients.credits", "clients.paid_until", ], ["AND" => ["support_tickets.status[>]" => 2, "support_tickets.reminder" => 1, "support_tickets.ended[<]" => $ticketrating, ], ]); if (isset($restr) && !empty($restr)) { foreach ($restr as $rowtr) { // Dashboard URL $ticketratingurl = str_replace($url_filter, $url_replace, JAK_rewrite::jakParseurl($ops["JAK_CLIENT_URL"], "rt", $rowtr["id"], $rowtr["initiated"])); // Let's check if we have an imap $answeremail = $ticktext = ""; $check_imap = $jakdb->get($jaktable2, "emailanswer", ["depid" => $rowtr["depid"], ]); if ($check_imap) { $answeremail = $check_imap; } // Get the ticket answer template if (!empty($HD_ANSWERS) && is_array($HD_ANSWERS)) { foreach ($HD_ANSWERS as $v) { if ($v["msgtype"] == 25 && $v["lang"] == $ops["JAK_LANG"]) { $phold = ["{url}", "{title}", "{cemail}", "{cname}", "{credits}", "{paid_until}", "{ticket}", "{subject}", "{ticketurl}", "{email}", ]; $replace = [str_replace($cron_url, "", $BASE_URL) , $ops["JAK_TITLE"], $rowtr["email"], $rowtr["name"], $rowtr["credits"], $rowtr["paid_until"], "#" . $rowtr["id"], $rowtr["subject"], $ticketratingurl, $answeremail, ]; $ticktext = str_replace($phold, $replace, $v["message"]); break; } }; } if (!empty($ticktext)) { // Get the email template $nlhtml = file_get_contents(str_replace("cron/", "", $cron_url . "template/" . $ops["JAK_FRONT_TEMPLATE"] . "/email/index.html")); // Change fake vars into real ones. $cssAtt = ["{emailcontent}", "{weburl}", "{title}", "{emailtpllogo}", "{emailtplcopy}", ]; $cssUrl = [$ticktext, str_replace($cron_url, "", $BASE_URL) , $ops["JAK_TITLE"], $ops["JAK_EMAILTPLLOGO"], $ops["JAK_EMAILTPLCOPY"], ]; $nlcontent = str_replace($cssAtt, $cssUrl, $nlhtml); $body = str_ireplace("[\]", "", $nlcontent); $mail = new PHPMailer(); // defaults to using php "mail()" or optional SMTP if ($ops["JAK_SMTP_MAIL"] == 1) { $mail->IsSMTP(); // telling the class to use SMTP $mail->Host = $ops["JAK_SMTPHOST"]; $mail->SMTPAuth = $ops["JAK_SMTP_AUTH"] ? true : false; // enable SMTP authentication $mail->SMTPSecure = $ops["JAK_SMTP_PREFIX"]; // sets the prefix to the server $mail->SMTPAutoTLS = false; $mail->SMTPKeepAlive = $ops["JAK_SMTP_ALIVE"] ? true : false; // SMTP connection will not close after each email sent $mail->Port = $ops["JAK_SMTPPORT"]; // set the SMTP port for the GMAIL server $mail->Username = $ops["JAK_SMTPUSERNAME"]; // SMTP account username $mail->Password = $ops["JAK_SMTPPASSWORD"]; // SMTP account password } elseif ($ops["JAK_SMTP_MAIL"] == 2) { //Tell PHPMailer to use SMTP $mail->isSMTP(); //Whether to use SMTP authentication $mail->SMTPAuth = true; //Set AuthType to use XOAUTH2 $mail->AuthType = "XOAUTH2"; $oauth_params = ["clientId" => $ops["JAK_OAUTH_CLIENTID"], "clientSecret" => $ops["JAK_OAUTH_SECRET"], ]; switch ($ops["JAK_OAUTH_PROVIDER"]) { case "Google": $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $provider = new Google($oauth_params); break; case "Yahoo": $mail->Host = "smtp.mail.yahoo.com"; $mail->Port = 465; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $provider = new Yahoo($oauth_params); break; case "Microsoft": $mail->Host = "smtp.office365.com"; $mail->Port = 587; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $provider = new Microsoft($oauth_params); break; case "Azure": $mail->Host = "smtp.office365.com"; $mail->Port = 587; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $params["tenantId"] = $ops["JAK_OAUTH_TENANTID"]; $provider = new Azure($oauth_params); break; } if ($provider) { $mail->setOAuth(new OAuth(["provider" => $provider, "clientId" => $ops["JAK_OAUTH_CLIENTID"], "clientSecret" => $ops["JAK_OAUTH_SECRET"], "refreshToken" => $ops["JAK_OAUTH_REFRESH"], "userName" => $ops["JAK_SMTP_SENDER"], ])); } } // Finally send the email $mail->SetFrom($ops["JAK_SMTP_SENDER"]); $mail->addAddress($rowtr["email"]); $mail->Subject = $ops["JAK_TITLE"] . " - " . $jkl["g29"] . ": " . $rowtr["subject"]; $mail->MsgHTML($body); $mail->Send(); } // Now we update the ticket table $jakdb->update($jaktable, ["reminder" => 2], ["id" => $rowtr["id"]]); }; } }; } ?>