mirror of
https://github.com/ACSPRI/queXS
synced 2024-04-02 12:12:16 +00:00
Updated to trunk
This commit is contained in:
@@ -232,7 +232,7 @@ function display_respondent_form($respondent_id = false,$case_id = false)
|
||||
/**
|
||||
* Use the default time zone if none other to work with
|
||||
*/
|
||||
$rzone = DEFAULT_TIME_ZONE;
|
||||
$rzone = get_setting("DEFAULT_TIME_ZONE");
|
||||
$fn = "";
|
||||
$ln = "";
|
||||
|
||||
|
||||
@@ -119,15 +119,21 @@ function display_shift_chooser($questionnaire_id, $shift_id = false)
|
||||
*
|
||||
* @param int $questionnaire_id The questionnaire id
|
||||
* @param int|bool $sample_import_id The sample import id or false if none selected
|
||||
* @param bool $disabled Display disabled samples? (default is true)
|
||||
*/
|
||||
function display_sample_chooser($questionnaire_id, $sample_import_id = false)
|
||||
function display_sample_chooser($questionnaire_id, $sample_import_id = false, $disabled = true)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$s = "";
|
||||
|
||||
if (!$disabled)
|
||||
$s = " AND si.enabled = 1 ";
|
||||
|
||||
$sql = "SELECT s.sample_import_id,si.description,CASE WHEN s.sample_import_id = '$sample_import_id' THEN 'selected=\'selected\'' ELSE '' END AS selected
|
||||
FROM questionnaire_sample as s, sample_import as si
|
||||
WHERE s.questionnaire_id = '$questionnaire_id'
|
||||
AND s.sample_import_id = si.sample_import_id";
|
||||
AND s.sample_import_id = si.sample_import_id $s";
|
||||
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
|
||||
@@ -270,7 +270,7 @@ function import_file($file, $description, $fields, $firstrow = 2)
|
||||
|
||||
//first find the timezone
|
||||
|
||||
$tzone = DEFAULT_TIME_ZONE; //set this to default
|
||||
$tzone = get_setting("DEFAULT_TIME_ZONE"); //set this to default
|
||||
|
||||
/**
|
||||
* Determine time zone from all possible sources in sample_var_type table
|
||||
|
||||
@@ -291,6 +291,16 @@ function limesurvey_quota_replicate_completions($lime_sid,$questionnaire_id,$sam
|
||||
{
|
||||
global $db;
|
||||
|
||||
$sql = "SELECT COUNT(*)
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = '".DB_NAME."'
|
||||
AND table_name = '" . LIME_PREFIX . "survey_$lime_sid'";
|
||||
|
||||
$rs = $db->GetOne($sql);
|
||||
|
||||
if ($rs != 1)
|
||||
return false;
|
||||
|
||||
$sql = "SELECT count(*) as c
|
||||
FROM " . LIME_PREFIX . "survey_$lime_sid as s
|
||||
JOIN `case` as c ON (c.questionnaire_id = '$questionnaire_id')
|
||||
@@ -390,6 +400,16 @@ function limesurvey_quota_completions($lime_sgqa,$lime_sid,$questionnaire_id,$sa
|
||||
{
|
||||
global $db;
|
||||
|
||||
$sql = "SELECT COUNT(*)
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = '".DB_NAME."'
|
||||
AND table_name = '" . LIME_PREFIX . "survey_$lime_sid'";
|
||||
|
||||
$rs = $db->GetOne($sql);
|
||||
|
||||
if ($rs != 1)
|
||||
return false;
|
||||
|
||||
$sql = "SELECT count(*) as c
|
||||
FROM " . LIME_PREFIX . "survey_$lime_sid as s
|
||||
JOIN `case` as c ON (c.questionnaire_id = '$questionnaire_id')
|
||||
@@ -412,18 +432,18 @@ function limesurvey_quota_completions($lime_sgqa,$lime_sid,$questionnaire_id,$sa
|
||||
* Based on GetQuotaInformation() from common.php in Limesurvey
|
||||
*
|
||||
* @param int $lime_quota_id The quota id to get information on
|
||||
* @param string $baselang The base language for getting information from questions
|
||||
* @return array An array containing the question information for comparison
|
||||
*/
|
||||
function get_limesurvey_quota_info($lime_quota_id,$baselang = DEFAULT_LOCALE)
|
||||
function get_limesurvey_quota_info($lime_quota_id)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$ret = array();
|
||||
|
||||
$sql = "SELECT *
|
||||
FROM ".LIME_PREFIX."quota_members
|
||||
WHERE quota_id='$lime_quota_id'";
|
||||
$sql = "SELECT q.*,s.language
|
||||
FROM ".LIME_PREFIX."quota_members as q, ".LIME_PREFIX."surveys as s
|
||||
WHERE q.quota_id='$lime_quota_id'
|
||||
AND s.sid = q.sid";
|
||||
|
||||
$rs = $db->GetAll($sql);
|
||||
|
||||
@@ -431,11 +451,12 @@ function get_limesurvey_quota_info($lime_quota_id,$baselang = DEFAULT_LOCALE)
|
||||
{
|
||||
$lime_qid = $quota_entry['qid'];
|
||||
$surveyid = $quota_entry['sid'];
|
||||
$language = $quota_entry['language'];
|
||||
|
||||
$sql = "SELECT type, title,gid
|
||||
FROM ".LIME_PREFIX."questions
|
||||
WHERE qid='$lime_qid'
|
||||
AND language='$baselang'";
|
||||
AND language='$language'";
|
||||
|
||||
$qtype = $db->GetRow($sql);
|
||||
|
||||
|
||||
@@ -367,10 +367,10 @@ function add_case($sample_id,$questionnaire_id,$operator_id = "NULL",$testing =
|
||||
$db->Execute("SET @row := 0");
|
||||
|
||||
$sql = "INSERT INTO contact_phone (case_id,priority,phone,description)
|
||||
SELECT $case_id as case_id,@row := @row + 1 AS priority,SUBSTRING_INDEX(e.extension,'/',-1) as phone, CONCAT(o.firstName, ' ', o.lastName)
|
||||
FROM operator as o, `extension` as e
|
||||
WHERE o.enabled = 1
|
||||
AND e.current_operator_id = o.operator_id";
|
||||
SELECT $case_id as case_id,@row := @row + 1 AS priority,IFNULL(SUBSTRING_INDEX(e.extension,'/',-1),'312345678') as phone, CONCAT(o.firstName, ' ', o.lastName)
|
||||
FROM operator as o
|
||||
LEFT JOIN `extension` as e ON (e.current_operator_id = o.operator_id)
|
||||
WHERE o.enabled = 1";
|
||||
|
||||
$db->Execute($sql);
|
||||
}
|
||||
@@ -609,7 +609,6 @@ function get_case_id($operator_id, $create = false)
|
||||
*
|
||||
* THINGS TO ADD:
|
||||
*
|
||||
* @todo also option of "time of day" calls - try once in the morning/etc
|
||||
* @todo also could check the respondent_not_available table to see if now is a "bad time" to call
|
||||
*/
|
||||
|
||||
@@ -625,10 +624,14 @@ function get_case_id($operator_id, $create = false)
|
||||
LEFT JOIN questionnaire_sample_exclude_priority AS qsep ON (qsep.questionnaire_id = c.questionnaire_id AND qsep.sample_id = c.sample_id)
|
||||
LEFT JOIN case_availability AS casa ON (casa.case_id = c.case_id)
|
||||
LEFT JOIN availability AS ava ON (ava.availability_group_id = casa.availability_group_id)
|
||||
LEFT JOIN questionnaire_timeslot AS qast ON (qast.questionnaire_id = c.questionnaire_id)
|
||||
LEFT JOIN questionnaire_sample_timeslot AS qasts ON (qasts.questionnaire_id = c.questionnaire_id AND qasts.sample_import_id = si.sample_import_id)
|
||||
JOIN operator_skill as os on (os.operator_id = op.operator_id and os.outcome_type_id = ou.outcome_type_id)
|
||||
WHERE c.current_operator_id IS NULL
|
||||
AND (casa.case_id IS NULL OR (ava.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(),'System',s.Time_zone_name)) AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= ava.start AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= ava.end ))
|
||||
AND (a.call_id is NULL or (a.end < CONVERT_TZ(DATE_SUB(NOW(), INTERVAL ou.default_delay_minutes MINUTE),'System','UTC')))
|
||||
AND ((apn.appointment_id IS NOT NULL) OR casa.case_id IS NULL OR (ava.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(),'System',s.Time_zone_name)) AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= ava.start AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= ava.end ))
|
||||
AND ((apn.appointment_id IS NOT NULL) OR qast.questionnaire_id IS NULL OR ((SELECT COUNT(*) FROM availability WHERE availability.availability_group_id = qast.availability_group_id AND (availability.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(),'System',s.Time_zone_name)) AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= availability.start AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= availability.end)) >= 1 AND (SELECT COUNT(call_attempt_id) FROM `call_attempt`, availability WHERE call_attempt.case_id = c.case_id AND (availability.availability_group_id = qast.availability_group_id AND (availability.day_of_week = DAYOFWEEK(CONVERT_TZ(call_attempt.start,'UTC',s.Time_zone_name)) AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) >= availability.start AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) <= availability.end))) = ( SELECT (SELECT COUNT(*) FROM availability, call_attempt WHERE call_attempt.case_id = c.case_id AND availability.availability_group_id = availability_group.availability_group_id AND (availability.day_of_week = DAYOFWEEK(CONVERT_TZ(call_attempt.start,'UTC',s.Time_zone_name)) AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) >= availability.start AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) <= availability.end)) as cou FROM availability_group, questionnaire_timeslot WHERE questionnaire_timeslot.questionnaire_id = c.questionnaire_id AND availability_group.availability_group_id = questionnaire_timeslot.availability_group_id ORDER BY cou ASC LIMIT 1)))
|
||||
AND ((apn.appointment_id IS NOT NULL) OR qasts.questionnaire_id IS NULL OR ((SELECT COUNT(*) FROM availability WHERE availability.availability_group_id = qasts.availability_group_id AND (availability.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(),'System',s.Time_zone_name)) AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= availability.start AND TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= availability.end)) >= 1 AND (SELECT COUNT(call_attempt_id) FROM `call_attempt`, availability WHERE call_attempt.case_id = c.case_id AND (availability.availability_group_id = qasts.availability_group_id AND (availability.day_of_week = DAYOFWEEK(CONVERT_TZ(call_attempt.start,'UTC',s.Time_zone_name)) AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) >= availability.start AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) <= availability.end))) = ( SELECT (SELECT COUNT(*) FROM availability, call_attempt WHERE call_attempt.case_id = c.case_id AND availability.availability_group_id = availability_group.availability_group_id AND (availability.day_of_week = DAYOFWEEK(CONVERT_TZ(call_attempt.start,'UTC',s.Time_zone_name)) AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) >= availability.start AND TIME(CONVERT_TZ(call_attempt.start, 'UTC' , s.Time_zone_name)) <= availability.end)) as cou FROM availability_group, questionnaire_sample_timeslot WHERE questionnaire_sample_timeslot.questionnaire_id = c.questionnaire_id AND questionnaire_sample_timeslot.sample_import_id = si.sample_import_id AND availability_group.availability_group_id = questionnaire_sample_timeslot.availability_group_id ORDER BY cou ASC LIMIT 1)))
|
||||
AND (a.call_id is NULL or (a.end < CONVERT_TZ(DATE_SUB(NOW(), INTERVAL ou.default_delay_minutes MINUTE),'System','UTC')))
|
||||
AND ap.case_id is NULL
|
||||
AND ((qsep.questionnaire_id is NULL) or qsep.exclude = 0)
|
||||
AND !(q.restrict_work_shifts = 1 AND sh.shift_id IS NULL AND os.outcome_type_id != 2)
|
||||
@@ -637,10 +640,10 @@ function get_case_id($operator_id, $create = false)
|
||||
AND ((apn.appointment_id IS NOT NULL) or qs.call_max = 0 or ((SELECT count(*) FROM `call` WHERE case_id = c.case_id) < qs.call_max))
|
||||
AND (apn.require_operator_id IS NULL OR apn.require_operator_id = '$operator_id')
|
||||
AND (SELECT count(*) FROM `questionnaire_sample_quota` WHERE questionnaire_id = c.questionnaire_id AND sample_import_id = s.import_id AND quota_reached = 1) = 0
|
||||
ORDER BY IF(ISNULL(apn.end),1,0),apn.end ASC, a.start ASC, qsep.priority DESC
|
||||
ORDER BY IF(ISNULL(apn.end),1,0),apn.end ASC, qsep.priority DESC, a.start ASC
|
||||
LIMIT 1";
|
||||
|
||||
//apn.appointment_id contains the id of an appointment if we are calling on an appointment
|
||||
|
||||
//apn.appointment_id contains the id of an appointment if we are calling on an appointment
|
||||
}
|
||||
$r2 = $db->GetRow($sql);
|
||||
|
||||
@@ -681,7 +684,7 @@ function get_case_id($operator_id, $create = false)
|
||||
|
||||
$sql = "SELECT s.sample_id as sample_id,c.case_id as case_id,qs.questionnaire_id as questionnaire_id,CONVERT_TZ(NOW(), 'System' , s.Time_zone_name) as resptime, q.testing as testing
|
||||
FROM sample as s
|
||||
JOIN (questionnaire_sample as qs, operator_questionnaire as o, questionnaire as q, operator as op, sample_import as si, operator_skill as os) on (op.operator_id = '$operator_id' and qs.sample_import_id = s.import_id and o.operator_id = op.operator_id and o.questionnaire_id = qs.questionnaire_id and q.questionnaire_id = o.questionnaire_id and si.sample_import_id = s.import_id and os.operator_id = op.operator_id and os.outcome_type_id = 1 and q.enabled = 1)
|
||||
JOIN (questionnaire_sample as qs, operator_questionnaire as o, questionnaire as q, operator as op, sample_import as si, operator_skill as os) on (op.operator_id = '$operator_id' and qs.sample_import_id = s.import_id and o.operator_id = op.operator_id and o.questionnaire_id = qs.questionnaire_id and q.questionnaire_id = o.questionnaire_id and si.sample_import_id = s.import_id and os.operator_id = op.operator_id and os.outcome_type_id = 1 and q.enabled = 1 and qs.allow_new = 1)
|
||||
LEFT JOIN `case` as c on (c.sample_id = s.sample_id and c.questionnaire_id = qs.questionnaire_id)
|
||||
LEFT JOIN call_restrict as cr on (cr.day_of_week = DAYOFWEEK(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) and TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) >= cr.start and TIME(CONVERT_TZ(NOW(), 'System' , s.Time_zone_name)) <= cr.end)
|
||||
LEFT JOIN shift as sh on (sh.questionnaire_id = q.questionnaire_id and (CONVERT_TZ(NOW(),'System','UTC') >= sh.start) AND (CONVERT_TZ(NOW(),'System','UTC') <= sh.end))
|
||||
@@ -860,12 +863,12 @@ function get_extension_password($operator_id)
|
||||
{
|
||||
global $db;
|
||||
|
||||
$sql = "SELECT e.extension_password
|
||||
$sql = "SELECT e.password
|
||||
FROM `extension` as e
|
||||
WHERE e.current_operator_id = '$operator_id'";
|
||||
|
||||
$rs = $db->GetRow($sql);
|
||||
if (!empty($rs) && isset($rs['extension_password'])) return $rs['extension_password'];
|
||||
if (!empty($rs) && isset($rs['password'])) return $rs['password'];
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,11 +71,11 @@ class voip {
|
||||
{
|
||||
$ret = $this->query("Action: IAXPeerList\r\n\r\n","PeerlistComplete");
|
||||
|
||||
$c = spliti("\r\n\r\n",$ret);
|
||||
$c = preg_split("/\r\n\r\n/i",$ret);
|
||||
$chans = array();
|
||||
foreach ($c as $s)
|
||||
{
|
||||
if(eregi("Event: PeerEntry.*ObjectName: ([0-9a-zA-Z-]+).*Status: ([/0-9a-zA-Z-]+)",$s,$regs))
|
||||
if(preg_match("{Event: PeerEntry.*ObjectName: ([0-9a-zA-Z-]+).*Status: ([/0-9a-zA-Z-]+)}is",$s,$regs))
|
||||
{
|
||||
//print T_("Channel: SIP/") . $regs[1] . " BridgedChannel " . $regs[2] . "\n";
|
||||
$chan = substr($regs[1],0,4);
|
||||
@@ -98,18 +98,18 @@ class voip {
|
||||
{
|
||||
$ret = $this->query("Action: Status\r\n\r\n","StatusComplete");
|
||||
|
||||
$c = spliti("\r\n\r\n",$ret);
|
||||
$c = preg_split("/\r\n\r\n/i",$ret);
|
||||
$chans = array();
|
||||
foreach ($c as $s)
|
||||
{
|
||||
if(eregi("Event: Status.*Channel: ((SIP/|IAX2/)[0-9a-zA-Z-]+).*BridgedChannel: ((SIP/|IAX2/)[/0-9a-zA-Z-]+)",$s,$regs))
|
||||
if(preg_match("{Event: Status.*Channel: ((SIP/|IAX2/)[0-9a-zA-Z-]+).*BridgedChannel: ((SIP/|IAX2/)[/0-9a-zA-Z-]+)}is",$s,$regs))
|
||||
{
|
||||
//print T_("Channel: SIP/") . $regs[1] . " BridgedChannel " . $regs[2] . "\n";
|
||||
$ccs = explode('-',$regs[1]);
|
||||
$chan = $ccs[0];
|
||||
$chans[$chan] = array($regs[1],$regs[3]);
|
||||
}
|
||||
else if(eregi("Event: Status.*Channel: ((SIP/|IAX2/)[0-9a-zA-Z-]+)",$s,$regs))
|
||||
else if(preg_match("{Event: Status.*Channel: ((SIP/|IAX2/)[0-9a-zA-Z-]+)}is",$s,$regs))
|
||||
{
|
||||
//print T_("Channel: ") . $regs[1] . "\n";
|
||||
$ccs = explode('-', $regs[1]);
|
||||
@@ -187,7 +187,7 @@ class voip {
|
||||
*/
|
||||
function dial($ext,$number)
|
||||
{
|
||||
$r = $this->query("Action: Originate\r\nChannel: $ext\r\nExten: $number\r\nPriority: 1\r\nCallerid: $ext\r\n\r\n","Response");
|
||||
$r = $this->query("Action: Originate\r\nChannel: $ext\r\nExten: $number\r\nContext: " . ORIGINATE_CONTEXT . "\r\nPriority: 1\r\nCallerid: $ext\r\n\r\n","Response");
|
||||
}
|
||||
|
||||
|
||||
@@ -266,7 +266,7 @@ class voip {
|
||||
if ($type == "SIP")
|
||||
{
|
||||
$ret = $this->query("Action: ExtensionState\r\nContext: from-internal\r\nExten: $ext\r\nActionID: \r\n\r\n","Status:");
|
||||
if(eregi("Status: ([0-9]+)",$ret,$regs))
|
||||
if(preg_match("{Status: ([0-9]+)}is",$ret,$regs))
|
||||
{
|
||||
if (isset($regs[1]))
|
||||
{
|
||||
@@ -540,14 +540,14 @@ class voipWatch extends voip {
|
||||
*
|
||||
*/
|
||||
if ($in == "\r\n")
|
||||
{
|
||||
{
|
||||
//print "PROCESS: ";
|
||||
/**
|
||||
* The call is ringing
|
||||
*/
|
||||
if (eregi("Event: Dial.*SubEvent: Begin.*Channel: ((SIP/|IAX2/)[0-9]+)",$line,$regs))
|
||||
{
|
||||
list($call_id,$case_id) = $this->getCallId($regs[1]);
|
||||
if (preg_match("{Event: Dial.*SubEvent: Begin.*Channel: ((SIP/|IAX2/)[0-9]+)}is",$line,$regs))
|
||||
{
|
||||
list($call_id,$case_id) = $this->getCallId($regs[1]);
|
||||
if ($call_id != 0)
|
||||
{
|
||||
print T_("Ringing") . T_(" Extension ") . $regs[1] . " " . T_("Case id") . ": <a href=\"supervisor.php?case_id=$case_id\">$case_id</a>\n";
|
||||
@@ -557,8 +557,8 @@ class voipWatch extends voip {
|
||||
/**
|
||||
* The call has been answered
|
||||
*/
|
||||
else if (eregi("Event: Bridge.*Channel1: ((SIP/|IAX2/)[0-9]+)",$line,$regs))
|
||||
{
|
||||
else if (preg_match("{Event: Bridge.*Channel1: ((SIP/|IAX2/)[0-9]+)}is",$line,$regs))
|
||||
{
|
||||
list($call_id,$case_id) = $this->getCallId($regs[1]);
|
||||
if ($call_id != 0)
|
||||
{
|
||||
@@ -569,8 +569,8 @@ class voipWatch extends voip {
|
||||
/**
|
||||
* The call has been hung up
|
||||
*/
|
||||
else if (eregi("Event: Hangup.*Channel: ((SIP/|IAX2/)[0-9]+)",$line,$regs))
|
||||
{
|
||||
else if (preg_match("{Event: Hangup.*Channel: ((SIP/|IAX2/)[0-9]+)}is",$line,$regs))
|
||||
{
|
||||
list($call_id,$case_id) = $this->getCallId($regs[1]);
|
||||
if ($call_id != 0)
|
||||
{
|
||||
@@ -582,7 +582,7 @@ class voipWatch extends voip {
|
||||
/**
|
||||
* The status of an extension has changed to unregistered
|
||||
*/
|
||||
else if (eregi("Event: PeerStatus.*Peer: ((SIP/|IAX2/)[0-9]+).*PeerStatus: Unregistered",$line,$regs))
|
||||
else if (preg_match("{Event: PeerStatus.*Peer: ((SIP/|IAX2/)[0-9]+).*PeerStatus: Unregistered}is",$line,$regs))
|
||||
{
|
||||
print T_("Unregistered") . T_(" Extension ") . $regs[1] . "\n";
|
||||
$this->setExtensionStatus($regs[1],false);
|
||||
@@ -591,7 +591,7 @@ class voipWatch extends voip {
|
||||
/**
|
||||
* The status of an extension has changed to registered
|
||||
*/
|
||||
else if (eregi("Event: PeerStatus.*Peer: ((SIP/|IAX2/)[0-9]+).*PeerStatus: Registered",$line,$regs))
|
||||
else if (preg_match("{Event: PeerStatus.*Peer: ((SIP/|IAX2/)[0-9]+).*PeerStatus: Registered}is",$line,$regs))
|
||||
{
|
||||
print T_("Registered") . T_(" Extension ") . $regs[1] . "\n";
|
||||
$this->setExtensionStatus($regs[1],true);
|
||||
|
||||
Reference in New Issue
Block a user