db->fetchValue($sql); if ($value) { $sql = sprintf("SELECT id FROM vmail_folder_user WHERE vmail_folder_id = %d AND vmail_user_id = %d", $row->vmail_folder_id, $other_id); $id = $this->db->fetchValue($sql); if ($id) return true; $sql = sprintf("INSERT INTO vmail_folder_user (vmail_folder_id,vmail_user_id,sys_user,sys_edit) VALUES (%d,%d,%s,now())", $row->vmail_folder_id, $other_id, $this->db->quote($_SESSION['sys']['login'])); $cmd = sprintf('sudo -u vmail /etc/dovecot/share-folder-add %s %s %s > /dev/null 2>&1', $row->from_user, $row->folder, $other); } else { $sql = sprintf("DELETE FROM vmail_folder_user WHERE vmail_folder_id = %d AND vmail_user_id = %d", $row->vmail_folder_id, $other_id); $cmd = sprintf('sudo -u vmail /etc/dovecot/share-folder-del %s %s %s > /dev/null 2>&1', $row->from_user, $row->folder, $other); } debug($cmd); if (file_exists('/etc/dovecot/share-folder-add')) system($cmd); return $this->db->execute($sql); } public function ajaxAdd(Array $data) { $sql = sprintf("INSERT INTO %s (vmail_user_id,folder,sys_user,sys_edit) VALUES (%d,%s,%s,now())", $this->table, $data['vmail_user_id'], $this->db->quote($data['folder']), $this->db->quote($_SESSION['sys']['login'])); return $this->db->execute($sql); } public function ajaxDelete(Array $data) { if (!$this->id) throw new Exception("No folder id provided"); $sql = sprintf("SELECT username || '@' || name AS from_user, folder, vmail_folder.id AS vmail_folder_id FROM vmail_folder JOIN vmail_user ON vmail_user.id = vmail_user_id JOIN vmail_domain ON vmail_domain.id = vmail_domain_id WHERE vmail_folder.id = %d", $this->id); $row = $this->db->fetchObject($sql); $sql = "SELECT id FROM vmail_user"; foreach ($this->db->fetchObjectList($sql) as $urow) $this->setMailboxPermissions($row, 0, $urow->id); $sql = sprintf("DELETE FROM vmail_folder WHERE id = %d", $this->id); return $this->db->execute($sql); } public function ajaxNew(Array $data) { $sql = sprintf("SELECT username || '@' || name FROM vmail_user JOIN vmail_domain ON vmail_domain.id = vmail_domain_id WHERE vmail_user.id = %d", $data['vmail_user_id']); $user = $this->db->fetchValue($sql); $cmd = sprintf('sudo -u vmail /etc/dovecot/folder-add %s %s > /dev/null 2>&1', $user, escapeshellarg($data['name'])); debug($cmd); if (file_exists('/etc/dovecot/folder-add')) system($cmd); } public function ajaxCheckbox(Array $data) { if (!$this->id) throw new Exception("No folder id provided"); $sql = sprintf("SELECT username || '@' || name AS from_user, folder, vmail_folder.id AS vmail_folder_id FROM vmail_folder JOIN vmail_user ON vmail_user.id = vmail_user_id JOIN vmail_domain ON vmail_domain.id = vmail_domain_id WHERE vmail_folder.id = %d", $this->id); $row = $this->db->fetchObject($sql); return $this->setMailboxPermissions($row, $data['value'], $this->id); } public function ajaxCheckboxAll(Array $data) { if (!$this->id) throw new Exception("No folder id provided"); $sql = sprintf("SELECT username || '@' || name AS from_user, folder, vmail_folder.id AS vmail_folder_id FROM vmail_folder JOIN vmail_user ON vmail_user.id = vmail_user_id JOIN vmail_domain ON vmail_domain.id = vmail_domain_id WHERE vmail_folder.id = %d", $this->id); $row = $this->db->fetchObject($sql); $sql = "SELECT id FROM vmail_user WHERE active = 1"; foreach ($this->db->fetchObjectList($sql) as $urow) $this->setMailboxPermissions($row, $data['value'], $urow->id); return true; } }