1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
<?php
# $Id$
/**
* Handler for domain key signing table
*/
class DkimsigningHandler extends PFAHandler
{
protected $db_table = 'dkim_signing';
protected $id_field = 'id';
protected $order_by = 'dkim_id, author';
protected function initStruct()
{
// Get Domains as options for authors
$domain_handler = new DomainHandler(0, $this->admin_username);
$domain_handler->getList('1=1');
// Get Mailboxes as options for authors
$mail_handler = new MailboxHandler(0, $this->admin_username);
$mail_handler->getList('1=1');
// Get Domain Keys
$dkim_handler = new DkimHandler(0, $this->admin_username);
$dkim_handler->getList('1=1');
$authors = array_merge(
array_keys($domain_handler->result()),
array_keys($mail_handler->result())
);
$this->struct = array(
# field name allow display in... type $PALANG label $PALANG description default / options / ...
# editing? form list
'id' => self::pacol(0, 0, 1, 'num' , 'pFetchmail_field_id' , '' , '', array(), array('dont_write_to_db' => 1)),
'dkim_id' => self::pacol(1, 1, 1, 'enum' , 'pDkim_field_dkim_id' , 'pDkim_field_dkim_id_desc' , '', array_keys($dkim_handler->result)),
'author' => self::pacol(1, 1, 1, 'enum' , 'pDkim_field_author' , 'pDkim_field_author_desc' , '', $authors),
);
}
protected function initMsg()
{
$this->msg['error_already_exists'] = 'dkim_signing_already_exists';
$this->msg['error_does_not_exist'] = 'dkim_signing_does_not_exist';
$this->msg['confirm_delete'] = 'confirm_delete_dkim';
if ($this->new) {
$this->msg['logname'] = 'create_dkim_signing_entry';
$this->msg['store_error'] = 'pFetchmail_database_save_error';
$this->msg['successmessage'] = 'pFetchmail_database_save_success';
} else {
$this->msg['logname'] = 'edit_dkim_entry';
$this->msg['store_error'] = 'pFetchmail_database_save_error';
$this->msg['successmessage'] = 'pFetchmail_database_save_success';
}
}
public function webformConfig()
{
$required_role = 'global-admin';
if (Config::bool('dkim_all_admins')) {
$required_role = 'admin';
}
return array(
# $PALANG labels
'formtitle_create' => 'pDkim_new_sign',
'formtitle_edit' => 'pDkim_edit_sign',
'create_button' => 'pFetchmail_new_entry',
# various settings
'required_role' => $required_role,
'listview' => 'list.php?table=dkimsigning',
'early_init' => 0,
);
}
protected function validate_new_id()
{
# auto_increment - any non-empty ID is an error
if ($this->id != '') {
$this->errormsg[$this->id_field] = 'auto_increment value, you must pass an empty string!';
return false;
}
return true;
}
/**
* @return boolean
*/
public function delete()
{
if (! $this->view()) {
$this->errormsg[] = Config::Lang($this->msg['error_does_not_exist']);
return false;
}
db_delete($this->db_table, $this->id_field, $this->id);
db_log($this->result['author'], 'delete_dkim_signing_entry', $this->result['id']);
$this->infomsg[] = Config::Lang_f('pDelete_delete_success', $this->result['author']);
return true;
}
public function domain_from_id()
{
return '';
}
protected function no_domain_field()
{
$domain_handler = new DomainHandler(0, $this->admin_username);
$domain_handler->getList('1=1');
$this->allowed_domains = array_keys($domain_handler->result());
}
/**
* Filters to only allowed domains, as author can be either a mailbox or a domain
* @param $db_result
* @return array
*/
protected function read_from_db_postprocess($db_result)
{
return array_filter($db_result, function ($row) {
$domain = $row['author'];
$at_pos = strpos($domain, '@');
if ($at_pos) {
$domain = preg_split('/@/', $domain)[1];
}
return in_array($domain, $this->allowed_domains);
});
}
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|