| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | <?phpfunction mailq($_action, $_data = null) {  if ($_SESSION['mailcow_cc_role'] != "admin") {    $_SESSION['return'][] = array(      'type' => 'danger',      'log' => array(__FUNCTION__, $_action, $_data),      'msg' => 'access_denied'    );    return false;  }  function process_mailq_output($returned_output, $_action, $_data) {    if ($returned_output !== NULL) {      if ($_action == 'cat') {        logger(array('return' => array(          array(            'type' => 'success',            'log' => array(__FUNCTION__, $_action, $_data),            'msg' => 'queue_cat_success'          )        )));        return $returned_output;      }      else {        if (isset($returned_output['type']) && $returned_output['type'] == 'danger') {          $_SESSION['return'][] = array(            'type' => 'danger',            'log' => array(__FUNCTION__, $_action, $_data),            'msg' => 'Error: ' . $returned_output['msg']          );        }        if (isset($returned_output['type']) && $returned_output['type'] == 'success') {          $_SESSION['return'][] = array(            'type' => 'success',            'log' => array(__FUNCTION__, $_action, $_data),            'msg' => 'queue_command_success'          );        }      }    }    else {      $_SESSION['return'][] = array(        'type' => 'danger',        'log' => array(__FUNCTION__, $_action, $_data),        'msg' => 'unknown'      );    }  }  if ($_action == 'get') {    $mailq_lines = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'list'));    $lines = 0;    // Hard limit to 10000 items    foreach (preg_split("/((\r?\n)|(\r\n?))/", $mailq_lines) as $mailq_item) if ($lines++ < 10000) {      if (empty($mailq_item) || $mailq_item == '1') {        continue;      }      $mq_line = json_decode($mailq_item, true);      if ($mq_line !== NULL) {        $rcpts = array();        foreach ($mq_line['recipients'] as $rcpt) {          if (isset($rcpt['delay_reason'])) {            $rcpts[] = $rcpt['address'] . ' (' . $rcpt['delay_reason'] . ')';          }          else {            $rcpts[] = $rcpt['address'];          }        }        if (!empty($rcpts)) {          $mq_line['recipients'] = $rcpts;        }        $line[] = $mq_line;      }    }    if (!isset($line) || empty($line)) {      return '[]';    }    else {      return json_encode($line);    }  }  elseif ($_action == 'delete') {    if (!is_array($_data['qid'])) {      $qids = array();      $qids[] = $_data['qid'];    }    else {      $qids = $_data['qid'];    }    $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'delete', 'items' => $qids));    process_mailq_output(json_decode($docker_return, true), $_action, $_data);  }  elseif ($_action == 'cat') {    if (!is_array($_data['qid'])) {      $qids = array();      $qids[] = $_data['qid'];    }    else {      $qids = $_data['qid'];    }    $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => 'cat', 'items' => $qids));    return process_mailq_output($docker_return, $_action, $_data);  }  elseif ($_action == 'edit') {    if (in_array($_data['action'], array('hold', 'unhold', 'deliver'))) {      if (!is_array($_data['qid'])) {        $qids = array();        $qids[] = $_data['qid'];      }      else {        $qids = $_data['qid'];      }      if (!empty($qids)) {        $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action'], 'items' => $qids));        process_mailq_output(json_decode($docker_return, true), $_action, $_data);      }    }    if (in_array($_data['action'], array('flush', 'super_delete'))) {      $docker_return = docker('post', 'postfix-mailcow', 'exec', array('cmd' => 'mailq', 'task' => $_data['action']));      process_mailq_output(json_decode($docker_return, true), $_action, $_data);    }  }}
 |