| Current Path : /var/www/html/administrator/components/com_jssupportticket/models/ |
| Current File : /var/www/html/administrator/components/com_jssupportticket/models/rolepermissions.php |
<?php
/**
* @Copyright Copyright (C) 2012 ... Ahmad Bilal
* @license GNU/GPL http://www.gnu.org/copyleft/gpl.html
* Company: Buruj Solutions
+ Contact: www.burujsolutions.com , info@burujsolutions.com
* Created on: March 04, 2014
^
+ Project: JS Tickets
^
*/
defined('_JEXEC') or die('Not Allowed');
jimport('joomla.application.component.model');
jimport('joomla.html.html');
class JSSupportticketModelRolePermissions extends JSSupportTicketModel {
function __construct() {
parent::__construct();
}
function storeRolePermissions($permissions,$roleid){
$db = JFactory::getDBO();
if (!is_numeric($roleid)) return false;
$row = $this->getTable('rolepermissions');
$new_permissions=array();
$query = "SELECT permissionid FROM `#__js_ticket_acl_role_permissions` WHERE roleid = " . $roleid;
$db->setQuery($query);
$old_permissions= $db->loadObjectList();
foreach ($permissions AS $key=>$value) {
$new_permissions[] = $value;
}
$error = array();
foreach ($old_permissions AS $oldperid) {
$match = false;
foreach ($new_permissions AS $perid) {
if ($oldperid->permissionid == $perid) {
$match = true;
break;
}
}
if ($match == false) {
$query = "DELETE FROM `#__js_ticket_acl_role_permissions` WHERE roleid = " . $roleid . " AND permissionid=" . $oldperid->permissionid;
$db->setQuery($query);
if (!$db->execute()) {
$err = $this->setError($row->getError());
$error[] = $err;
}
}
}
foreach ($new_permissions AS $perid) {
$insert = true;
foreach ($old_permissions AS $oldperid) {
if ($oldperid->permissionid == $perid) {
$insert = false;
break;
}
}
if ($insert) {
$row->id = "";
$row->roleid = $roleid;
$row->permissionid = $perid;
$row->grant = 1;
$row->status=1;
if (!$row->store()) {
$err = $this->setError($row->getError());
$error[] = $err;
}
}
}
if (!empty($error))
return false;
else
return true;
}
function getRolePermissionsAdmin($roleid) {
$db = $this->getDBO();
if (is_numeric($roleid) == false)
return false;
$query = "SELECT r_per.permissionid AS rolepermissionid,per.id,per.permission,per.permissiongroup AS pgroup
FROM `#__js_ticket_acl_permissions` AS per
LEFT JOIN `#__js_ticket_acl_role_permissions` AS r_per ON (r_per.roleid=" . $roleid . " AND r_per.permissionid=per.id )
ORDER BY per.permissiongroup,per.id";
$db->setQuery($query);
$permission_role = $db->loadObjectList();
$query = "SELECT r_da.departmentid AS roledepartmentid,dep.id,dep.departmentname AS name
FROM `#__js_ticket_departments` AS dep
LEFT JOIN `#__js_ticket_acl_role_access_departments` AS r_da ON (r_da.roleid=" . $roleid . " AND r_da.departmentid=dep.id )
ORDER BY dep.id";
$db->setQuery($query);
$department_role = $db->loadObjectList();
$result[1] = $permission_role;
$result[2] = $department_role;
return $result;
}
function getRolePermissionsAdminAjax($roleid) {
$db = $this->getDBO();
if (is_numeric($roleid) == false)
return false;
$result = $this->getRolePermissionsAdmin($roleid);
$deptext = JText::_("Department section");
$depid = "rad_alldepartmentaccess";
$depclass = "rad_departmentaccess";
$return_value = "<div class='js-col-md-12'><div class='js-per-subheading'>";
$return_value .= "<span class='head-text'>".$deptext."</span>";
$return_value .= "<span class='head-checkbox'>";
$dcheck = (!$roleid) ? 'checked=checked' : '';
$return_value .= "<input type='checkbox' id='$depid' $dcheck onclick=selectdeseletsection('$depid','$depclass') /><label for='$depid'>" . JText::_('Select / Deselect All') . "</label>\n";
$return_value .= "</span></div>";
$return_value .= "<div class='js-per-wrapper'>";
foreach ($result[2] AS $dep) {
$return_value .= "<div class='js-col-md-4 js-per-datawrapper'><div class='js-per-data'>";
$dchecked_or_not = "";
if ($roleid) { //default role permission case
if (isset($dep->roledepartmentid)) {
$dchecked_or_not = ($dep->roledepartmentid == $dep->id) ? "checked=checked" : "";
}
} else {
$dchecked_or_not = "checked=checked";
}
$return_value .= "<input type='checkbox' id='roledepdata_$dep->name' class='$depclass' name='roledepdata[$dep->name]' value='$dep->id' $dchecked_or_not/>";
$return_value .= "<label for='roledepdata_$dep->name'>" . JText::_($dep->name) . "</label>\n";
$return_value .= "</div></div>";
}
$return_value .= "</div>";
$pgroup = "";
foreach ($result[1] AS $per) {
if ($pgroup != $per->pgroup) {
$pgroup = $per->pgroup;
switch ($pgroup) {
case 1:
$text = JText::_('Ticket section');
$id = "t_s_allrolepermision";
$class = "t_s_rolepermission";
$section = 'ticke';
break;
case 2:
$text = JText::_('Staff section');
$id = "s_s_allrolepermision";
$class = "s_s_rolepermission";
$section = 'staff';
break;
case 3:
$text = JText::_('Knowledge base section');
$id = "kb_s_allrolepermision";
$class = "kb_s_rolepermission";
$section = 'kb';
break;
case 4:
$text = JText::_('FAQ section');
$id = "f_s_allrolepermision";
$class = "f_s_rolepermission";
$section = 'faqs';
break;
case 5:
$text = JText::_('Download section');
$id = "d_s_allrolepermision";
$class = "d_s_rolepermission";
$section = 'downloads';
break;
case 6:
$text = JText::_('Announcement section');
$id = "a_s_allrolepermision";
$class = "a_s_rolepermission";
$section = 'announcement';
break;
case 7:
$text = JText::_('Mail section');
$id = "ms_s_allrolepermision";
$class = "ms_s_rolepermission";
$section = 'mail';
break;
}
$return_value .= "<div class='js-per-subheading'>";
$return_value .= "<span class='head-text'>".$text."</span>";
$return_value .= "<span class='head-checkbox'>";
$rchecked = (!$roleid) ? 'checked=checked' : '';
$return_value .= "<input type='checkbox' id='$id' $rchecked onclick=selectdeseletsection('$id','$class') /><label for='$id'> " . JText::_('Select / Deselect All') . "</label>\n";
$return_value .= "</span></div>";
}
$return_value .= "<div class='js-per-wrapper'>";
$return_value .= "<div class='js-col-md-4 js-per-datawrapper'><div class='js-per-data'>";
$checked_or_not = "";
if ($roleid) { //default role permissions
if (isset($per->rolepermissionid)) {
$checked_or_not = ($per->rolepermissionid == $per->id) ? "checked='checked'" : "";
}
} else { //add case
$checked_or_not = "checked='checked'";
}
$ch_id = $per->permission . '_' . $section;
$return_value .= "<input type='checkbox' id='$ch_id' class='$class' name='roleperdata[$per->permission]' value='$per->id' $checked_or_not />\n";
$return_value .= "<label for='$ch_id'>" . JText::_($per->permission) . "</label>\n";
$return_value .= "</div></div>";
$return_value .= "</div>";
}
$return_value .= "</div><div id='js-tk-per-ajax-bottom-border'></div>";
return $return_value;
}
function getRolePermissions($roleid){
$permission_by_task=array();
$db = $this->getDBO();
if (is_numeric($roleid) == false) return false;
$query = "SELECT r_per.permissionid AS rolepermissionid,per.id,per.permission,per.permissiongroup AS pgroup
FROM `#__js_ticket_acl_permissions` AS per
LEFT JOIN `#__js_ticket_acl_role_permissions` AS r_per ON (r_per.roleid=".$roleid." AND r_per.permissionid=per.id )
ORDER BY per.permissiongroup,per.id";
$db->setQuery($query);
$permission_role = $db->loadObjectList();
$query = "SELECT r_da.departmentid AS roledepartmentid,dep.id,dep.departmentname AS name
FROM `#__js_ticket_departments` AS dep
LEFT JOIN `#__js_ticket_acl_role_access_departments` AS r_da ON (r_da.roleid=".$roleid." AND r_da.departmentid=dep.id )
ORDER BY dep.id";
$db->setQuery($query);
$department_role = $db->loadObjectList();
foreach($permission_role AS $roleper){
switch($roleper->pgroup){
case 1:
$permission_by_task['ticket_section'][]=(object) array('id'=>$roleper->id,'permission'=>$roleper->permission,'pgroup'=>$roleper->pgroup,'rolepermissionid'=>$roleper->rolepermissionid);
break;
case 2:
$permission_by_task['staff_section'][]=(object) array('id'=>$roleper->id,'permission'=>$roleper->permission,'pgroup'=>$roleper->pgroup,'rolepermissionid'=>$roleper->rolepermissionid);
break;
case 3:
$permission_by_task['kb_section'][]=(object) array('id'=>$roleper->id,'permission'=>$roleper->permission,'pgroup'=>$roleper->pgroup,'rolepermissionid'=>$roleper->rolepermissionid);
break;
case 4:
$permission_by_task['faq_section'][]=(object) array('id'=>$roleper->id,'permission'=>$roleper->permission,'pgroup'=>$roleper->pgroup,'rolepermissionid'=>$roleper->rolepermissionid);
break;
case 5:
$permission_by_task['download_section'][]=(object) array('id'=>$roleper->id,'permission'=>$roleper->permission,'pgroup'=>$roleper->pgroup,'rolepermissionid'=>$roleper->rolepermissionid);
break;
case 6:
$permission_by_task['announcement_section'][]=(object) array('id'=>$roleper->id,'permission'=>$roleper->permission,'pgroup'=>$roleper->pgroup,'rolepermissionid'=>$roleper->rolepermissionid);
break;
case 7:
$permission_by_task['mail_section'][]=(object) array('id'=>$roleper->id,'permission'=>$roleper->permission,'pgroup'=>$roleper->pgroup,'rolepermissionid'=>$roleper->rolepermissionid);
break;
}
}
$result[1] = $permission_role;
$result[2] = $department_role;
$result[3] = $permission_by_task;
return $result;
}
function getRolePermissionsAjax($roleid,$c_p_grant){
if (!is_numeric($roleid)) return false;
$db = $this->getDBO();
$result=$this->getRolePermissions($roleid);
$deptext=JText::_("Department Section");
$depid="rad_alldepartmentaccess";
$depclass="rad_departmentaccess";
$change_permission_grant = ($c_p_grant == 1) ? '' : 'disabled=disabled';
$return_value = "<div class='js-per-wrapper'>";
if(isset($result[2]) && is_array($result[2])){
$return_value .= "<div class='js-per-subheading'>";
$return_value .= "<span class='head-text'>".$deptext."</span>";
$return_value .= "<span class='head-checkbox'>";
$dcheck=(!$roleid)?'checked=checked':'';
$return_value .= "<input type='checkbox' $change_permission_grant id='$depid' $dcheck onclick=selectdeseletsection('$depid','$depclass') /><label for='$depid'>".JText::_('Select / Deselect All')."</label>\n";
$return_value .= "</span>";
$return_value .= "</div>";
foreach($result[2] AS $dep){
$return_value .= "<div class='js-col-md-4 js-per-datawrapper'><div class='js-per-data'>";
$dchecked_or_not="";
if($roleid) { //default role permission case
if(isset($dep->roledepartmentid)) {
$dchecked_or_not=($dep->roledepartmentid==$dep->id) ? "checked=checked" : "";
}
}else{
$dchecked_or_not="checked=checked" ;
}
$return_value .= "<input type='checkbox' $change_permission_grant id='roledepdata_$dep->name' class='$depclass' name='roledepdata[$dep->name]' value='$dep->id' $dchecked_or_not/>";
$return_value .= "<label for='roledepdata_$dep->name'>".JText::_($dep->name)."</label>";
$return_value .= "</div></div>";
}
}
if(isset($result[3]) && is_array($result[3])){
$return_value .= "<div class='js-per-wrapper'>";
$permission_keys= array_keys($result[3]);
foreach($permission_keys AS $permissin_by_section){
switch($permissin_by_section){
case 'ticket_section';
$text=JText::_('Ticket section');
$id="t_s_allrolepermision";
$class="t_s_rolepermission";
$section='ticke';
break;
case 'staff_section';
$text=JText::_('Staff section');
$id="s_s_allrolepermision";
$class="s_s_rolepermission";
$section='staff';
break;
case 'kb_section';
$text=JText::_('Knowledge base section');
$id="kb_s_allrolepermision";
$class="kb_s_rolepermission";
$section='kb';
break;
case 'faq_section';
$text=JText::_('FAQ section');
$id="f_s_allrolepermision";
$class="f_s_rolepermission";
$section='faqs';
break;
case 'download_section';
$text=JText::_('Download section');
$id="d_s_allrolepermision";
$class="d_s_rolepermission";
$section='downloads';
break;
case 'announcement_section';
$text=JText::_('Announcement section');
$id="a_s_allrolepermision";
$class="a_s_rolepermission";
$section='announcement';
break;
case 'mail_section';
$text=JText::_('Mail section');
$id="m_s_allrolepermision";
$class="m_s_rolepermission";
$section='mail';
break;
}
$return_value .= "<div class='js-per-subheading'>";
$return_value .= "<span class='head-text'>".$text."</span>";
$return_value .= "<span class='head-checkbox'>";
$rchecked=(!$roleid) ? 'checked=checked':'' ;
$return_value .= "<input $change_permission_grant type='checkbox' id='$id' $rchecked onclick=selectdeseletsection('$id','$class') /> <label for='$id'>".JText::_('Select / Deselect All')."</label>\n";
$return_value .= "</span>";
$return_value .= "</div>";
foreach($result[3][$permissin_by_section] AS $per){
$checked_or_not="";
$return_value .= "<div class='js-col-md-4 js-per-datawrapper'><div class='js-per-data'>";
if($roleid) { //default role permissions
if(isset($per->rolepermissionid)) { $checked_or_not=($per->rolepermissionid==$per->id) ? "checked='checked'" : ""; }
}else{ //add case
$checked_or_not="checked='checked'" ;
}
$ch_id=$per->permission.'_'.$section;
$return_value .= "<input type='checkbox' $change_permission_grant id='$ch_id' class='$class' name='roleperdata[$per->permission]' value='$per->id' $checked_or_not />\n";
$return_value .= "<label for='$ch_id'>".JText::_($per->permission)."</label>\n";
$return_value .= "</div></div>";
}
}
$return_value .= "</div>";
$return_value .= "<div id='js-tk-per-ajax-bottom-border'></div>";
}
return $return_value;
}
function deleteRolePermissions($roleid) {
if(!is_numeric($roleid)) return false;
$db = $this->getDBO();
$query = "DELETE FROM `#__js_ticket_acl_role_access_departments` WHERE roleid = ".$roleid;
$db->setQuery($query);
if (!$db->execute()) {
$err = $this->setError($row->getError());
return false;
}
$query = "DELETE FROM `#__js_ticket_acl_role_permissions` WHERE roleid = " . $roleid;
$db->setQuery($query);
if (!$db->execute()) {
$err = $this->setError($row->getError());
return false;
}
return true;
}
}