True,
'add_managers' => True,
'delete_managers' => True,
'edit_managers' => True,
'copy_managers' => True,
'validate' => True
);
var $functions;
var $config;
function uimanagers()
{
$this->functions = CreateObject('expressoAdmin1_2.functions');
$c = CreateObject('phpgwapi.config','expressoAdmin1_2');
$c->read_repository();
$this->config = $c->config_data;
if(!@is_object($GLOBALS['phpgw']->js))
{
$GLOBALS['phpgw']->js = CreateObject('phpgwapi.javascript');
}
$GLOBALS['phpgw']->js->validate_file('jscode','connector','expressoAdmin1_2');#diretorio, arquivo.js, aplicacao
$GLOBALS['phpgw']->js->validate_file('jscode','managers','expressoAdmin1_2');
}
function row_action($lang,$link,$manager_lid,$context)
{
return ''.lang($lang).' ';
}
function list_managers()
{
// Caso nao seja admin, sai.
if ($GLOBALS['phpgw']->acl->check('group_access',1,'admin'))
{
$GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/admin/index.php'));
}
// Imprime o NavBar
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['expressoAdmin1_2']['title'].' - '.lang('List Managers');
$GLOBALS['phpgw']->common->phpgw_header();
// Seta o template
$p = CreateObject('phpgwapi.Template',PHPGW_APP_TPL);
$p->set_file(array('managers' => 'managers.tpl'));
$p->set_block('managers','body','body');
$p->set_block('managers','row','row');
$p->set_block('managers','row_empty','row_empty');
$tpl_vars = $p->get_undefined('body');
$var = Array(
'action' => $GLOBALS['phpgw']->link('/index.php','menuaction=expressoAdmin1_2.uimanagers.add_managers'),
'tr_color' => '#DDDDDD',
'th_bg' => $GLOBALS['phpgw_info']['theme']['th_bg']
);
// Cria dinamicamente os langs
foreach ($tpl_vars as $atribute)
{
$lang = strstr($atribute, 'lang_');
if($lang !== false)
{
$p->set_var($atribute, $this->make_lang($atribute));
}
}
// Le BD para pegar os administradors.
$query = 'SELECT manager_lid,context FROM phpgw_expressoadmin ORDER by manager_lid';
$GLOBALS['phpgw']->db->query($query);
while($GLOBALS['phpgw']->db->next_record())
{
$managers[] = $GLOBALS['phpgw']->db->row();
}
$ldap_conn = $GLOBALS['phpgw']->common->ldapConnect();
$justthese = array("cn");
// Loop para listar os administradores
if (count($managers))
{
foreach($managers as $array_managers)
{
$managers_context = "";
$a_managers_context = split("%", $array_managers['context']);
foreach ($a_managers_context as $context)
{
$managers_context .= "$context
";
}
$filter="(&(phpgwAccountType=u)(uid=".$array_managers['manager_lid']."))";
$ldap_search = ldap_search($ldap_conn, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese);
$ldap_result = ldap_get_entries($ldap_conn, $ldap_search);
$p->set_var('manager_lid', $array_managers[manager_lid]);
$p->set_var('manager_cn', $ldap_result[0]['cn'][0] == '' ? 'NAO ENCONTRADO NO LDAP' : $ldap_result[0]['cn'][0]);
$p->set_var('context', $managers_context);
$p->set_var('link_edit',$this->row_action('edit','edit_managers',$array_managers[manager_lid],$array_managers[context]));
$p->set_var('link_delete',$this->row_action('delete','delete_managers',$array_managers[manager_lid],$array_managers[context]));
$p->set_var('link_copy',"Copiar");
$p->fp('rows','row',True);
}
}
$p->set_var($var);
$p->pfp('out','body');
ldap_close($ldap_conn);
}
function add_managers()
{
// Caso nao seja admin, sai.
if ($GLOBALS['phpgw']->acl->check('group_access',1,'admin'))
{
$GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/admin/index.php'));
}
// Seta o template
$p = CreateObject('phpgwapi.Template',PHPGW_APP_TPL);
$p->set_file(array('managers' => 'managers_form.tpl'));
$p->set_block('managers','form','form');
$tpl_vars = $p->get_undefined('form');
// Imprime o NavBar
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['expressoAdmin1_2']['title'].' - '.lang('Add Managers');
$GLOBALS['phpgw']->common->phpgw_header();
// Seta variaveis javascript necessárias
$webserver_url = $GLOBALS['phpgw_info']['server']['webserver_url'];
$scripts_java = '';
// App, create list of available apps
$applications_list = $this->make_app_list();
$input_context_fields = '
';
// Seta variaveis que estao no TPL
$var = Array(
'scripts_java' => $scripts_java,
'action' => $GLOBALS['phpgw']->link('/index.php','menuaction=expressoAdmin1_2.uimanagers.validate'),
'display_samba_suport' => $this->config['expressoAdmin_samba_support'] == 'true' ? '' : 'display:none',
'type' => "add",
'color_bg1' => "#E8F0F0",
'color_bg2' => "#D3DCE3",
'color_font1' => "#DDDDDD",
'color_font2' => "#EEEEEE",
'input_context_fields' => $input_context_fields,
'error_messages' => $_POST['error_messages'] == '' ? '' : '',
'manager_lid' => $_POST['manager_lid'],
'context' => $_POST['context'],
'app_list' => $applications_list
);
$p->set_var($var);
// Cria dinamicamente os langs e seta acls
foreach ($tpl_vars as $atribute)
{
$acl = strstr($atribute, 'acl_');
$lang = strstr($atribute, 'lang_');
// Recuperar os valores das ACLS
if ($acl !== false)
{
$p->set_var($atribute, $_POST[$atribute] != '' ? 'checked' : '');
}
// Setar os langs do tpl.
elseif($lang !== false)
{
$p->set_var($atribute, $this->make_lang($atribute));
}
}
echo $p->fp('out','form');
}
function delete_managers()
{
// Criar uma verificação e jogar a query para o BO.
$context = $_GET['context'];
$manager_lid = $_GET['manager_lid'];
$query = "DELETE FROM phpgw_expressoadmin WHERE manager_lid = '".$manager_lid."' AND context = '" . $context ."'";
$GLOBALS['phpgw']->db->query($query);
// Remove Gerente da tabela dos apps
$query = "DELETE FROM phpgw_expressoadmin_apps WHERE "
. "manager_lid = '".$manager_lid."' AND "
. "context = '".$context."'";
$GLOBALS['phpgw']->db->query($query);
// Remove Gerente na ACL do expressoadmin
$accounts = CreateObject('phpgwapi.accounts');
$manager_id = $accounts->name2id($_GET['manager_lid']);
$sql = "DELETE FROM phpgw_acl WHERE acl_appname = 'expressoadmin' AND acl_account = '" . $manager_id . "'";
$GLOBALS['phpgw']->db->query($sql);
ExecMethod('expressoAdmin1_2.uimanagers.list_managers');
}
function edit_managers()
{
// Caso nao seja admin, sai.
if ($GLOBALS['phpgw']->acl->check('group_access',1,'admin'))
{
$GLOBALS['phpgw']->redirect($GLOBALS['phpgw']->link('/admin/index.php'));
}
// Verifica se eh a primeira entrada, ai eu tenho o get, senao pego o post.
if ($_GET['manager_lid'] != '')
{
$first_time = true;
$_POST['manager_lid'] = $_GET['manager_lid'];
$_POST['context'] = $_GET['context'];
$old_manager_lid = $_GET['manager_lid'];
$old_context = $_GET['context'];
}
elseif ($_POST['manager_lid'] != '')
{
$first_time = false;
$old_manager_lid = $_POST['old_manager_lid'];
$old_context = $_POST['old_context'];
}
if ($first_time)
{
//Pego ACL do gerente
$manager = $this->functions->read_acl($_GET['manager_lid']);
//Cria vetor da ACL
$manager_acl = $this->functions->make_array_acl($manager['acl']);
//Pesquisa no Banco e pega os valores dos apps.
$query = "SELECT * FROM phpgw_expressoadmin_apps WHERE manager_lid = '" . $_GET['manager_lid'] . "' AND context = '" . $_GET['context'] . "'";
$GLOBALS['phpgw']->db->query($query);
$i=0;
$manager[0]['apps'] = array();
while($GLOBALS['phpgw']->db->next_record())
{
$tmp[$i] = $GLOBALS['phpgw']->db->row();
$_POST['applications_list'][$tmp[$i]['app']] = 1;
$manager[0]['apps'][$tmp[$i]['app']] = 1;
$i++;
}
}
// Seta o template
$p = CreateObject('phpgwapi.Template',PHPGW_APP_TPL);
$p->set_file(array('managers' => 'managers_form.tpl'));
$p->set_block('managers','form','form');
$tpl_vars = $p->get_undefined('form');
// Imprime o NavBar
unset($GLOBALS['phpgw_info']['flags']['nonavbar']);
$GLOBALS['phpgw_info']['flags']['app_header'] = $GLOBALS['phpgw_info']['apps']['expressoAdmin1_2']['title'].' - '.lang('Edit Managers');
$GLOBALS['phpgw']->common->phpgw_header();
// Seta variaveis javas necessárias
$webserver_url = $GLOBALS['phpgw_info']['server']['webserver_url'];
$scripts_java = '';
// App, create list of available apps
$applications_list = $this->make_app_list($manager[0]['apps']);
$a_context = split("%", $_POST['context']);
foreach ($a_context as $context)
$input_context_fields .= '
';
$var = Array(
'scripts_java' => $scripts_java,
'action' => $GLOBALS['phpgw']->link('/index.php','menuaction=expressoAdmin1_2.uimanagers.validate'),
'display_samba_suport' => $this->config['expressoAdmin_samba_support'] == 'true' ? '' : 'display:none',
'color_bg1' => "#E8F0F0",
'color_bg2' => "#D3DCE3",
'color_font1' => "#DDDDDD",
'color_font2' => "#EEEEEE",
'type' => "edit",
'error_messages'=> $_POST['error_messages'] == '' ? '' : '',
'manager_lid' => $_POST['manager_lid'],
'context' => $_POST['context'],
'input_context_fields' => $input_context_fields,
// Para o update no banco, preciso saber oq foi alterado e para que.
// Talvez so o manager e o contexto.
'old_manager_lid' => $old_manager_lid,
'old_context' => $old_context,
'app_list' => $applications_list
);
$p->set_var($var);
// Cria dinamicamente os langs e seta acls
foreach ($tpl_vars as $atribute)
{
$acl = strstr($atribute, 'acl_');
$lang = strstr($atribute, 'lang_');
// Recuperar os valores das ACLS
if ($acl !== false)
{
if ($first_time)
$p->set_var($atribute, $manager_acl[$atribute] != '' ? 'checked' : '');
else
$p->set_var($atribute, $_POST[$atribute] != '' ? 'checked' : '');
}
// Setar os langs do tpl.
elseif($lang !== false)
{
$p->set_var($atribute, $this->make_lang($atribute));
}
}
echo $p->fp('out','form');
}
function validate()
{
$accounts = CreateObject('phpgwapi.accounts');
$errors = array();
// verifica se o manager existe. caso retorne 1 existe e eh uma conta de usuario.
$manager_lid_exists = $accounts->exists($_POST['manager_lid']);
if ($manager_lid_exists != 1)
{
$_POST['error_messages'] = lang("Manager LID don't exist.");
if ($_POST['type'] == 'add')
$this->add_managers();
elseif ($_POST['type'] == 'edit')
$this->edit_managers();
return;
}
// Verifica se o contexto existe.
$dn = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
$passwd = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
$ldap_conn = ldap_connect($GLOBALS['phpgw_info']['server']['ldap_host']);
ldap_set_option($ldap_conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap_conn, LDAP_OPT_REFERRALS, 0);
ldap_bind($ldap_conn,$dn,$passwd);
$contexts = split("%", $_POST['context']);
foreach ($contexts as $index=>$context)
{
$sr=@ldap_list($ldap_conn, $context, "cn=*");
if (!$sr)
{
$_POST['error_messages'] = lang("Context don't exist") . ": $context";
ldap_close($ldap_conn);
if ($_POST['type'] == 'add')
$this->add_managers();
elseif ($_POST['type'] == 'edit')
$this->edit_managers();
return;
}
}
if ($_POST['type'] == 'add')
{
//Verifica se ja existe o manager com aquele contexto cadastrado
$query = "SELECT manager_lid FROM phpgw_expressoadmin WHERE manager_lid = '" . $_POST['manager_lid'] . "' AND context = '" . $_POST['context'] . "'";
$GLOBALS['phpgw']->db->query($query);
$num_registros = 0;
while($GLOBALS['phpgw']->db->next_record())
{
$tmp[] = $GLOBALS['phpgw']->db->row();
$num_registros++;
}
if ($num_registros != 0)
{
$_POST['error_messages'] = lang('Este Gerente, neste contexto já exite !!');
$this->add_managers();
return;
}
}
if ($_POST['type'] == 'add')
ExecMethod('expressoAdmin1_2.bomanagers.add_managers');
elseif ($_POST['type'] == 'edit')
ExecMethod('expressoAdmin1_2.bomanagers.edit_managers');
return true;
}
function copy_managers()
{
/*
echo '
'; print_r($_GET); $manager_lid = $_GET['manager_lid']; //Pego ACL do gerente $manager = $this->functions->read_acl($manager_lid); //Cria vetor da ACL $manager_acl = $this->functions->make_array_acl($manager[0]['acl']); //Pesquisa no Banco e pega os valores dos apps. $query = "SELECT * FROM phpgw_expressoadmin_apps WHERE manager_lid = '" . $manager_lid . "' AND context = '" . $_GET['context'] . "'"; $GLOBALS['phpgw']->db->query($query); $i=0; $manager[0]['apps'] = array(); while($GLOBALS['phpgw']->db->next_record()) { $tmp[$i] = $GLOBALS['phpgw']->db->row(); $_POST['applications_list'][$tmp[$i]['app']] = 1; $manager[0]['apps'][$tmp[$i]['app']] = 1; $i++; } print_r($manager); */ } function make_lang($ram_lang) { $a_lang = split("_", $ram_lang); $a_lang_reverse = array_reverse ( $a_lang, true ); //Retira o lang do array. array_pop ( $a_lang_reverse ); $a_lang = array_reverse ( $a_lang_reverse, true ); $a_new_lang = implode ( " ", $a_lang ); return lang($a_new_lang); } function make_app_list($manager_app_list) { $this->nextmatchs = createobject('phpgwapi.nextmatchs'); $apps = CreateObject('phpgwapi.applications',$_account_id); $db_perms = $apps->read_account_specific(); $availableApps = $GLOBALS['phpgw_info']['apps']; uasort($availableApps,create_function('$a,$b','return strcasecmp($a["title"],$b["title"]);')); // Loop para criar dinamicamente uma tabela com 3 colunas, cada coluna com um aplicativo e um check box. $applications_list = ''; $app_col1 = ''; $app_col2 = ''; $app_col3 = ''; $total_apps = count($availableApps); $i = 0; foreach($availableApps as $app => $data) { // 1 coluna if (($i +1) % 3 == 1) { if ($manager_app_list[$app] == 1) $checked = 'checked'; else $checked = ''; $app_col1 = sprintf("%s \n", $data['title'],$app,$checked, $disabled); if ($i == ($total_apps-1)) $applications_list .= sprintf(' %s ',$this->nextmatchs->alternate_row_color(), $app_col1); } // 2 coluna if (($i +1) % 3 == 2) { if ($manager_app_list[$app] == 1) $checked = 'checked'; else $checked = ''; $app_col2 = sprintf("%s \n", $data['title'],$app,$checked, $disabled); if ($i == ($total_apps-1)) $applications_list .= sprintf(' %s%s ',$this->nextmatchs->alternate_row_color(), $app_col1,$app_col2); } // 3 coluna if (($i +1) % 3 == 0) { if ($manager_app_list[$app] == 1) $checked = 'checked'; else $checked = ''; $app_col3 = sprintf("%s \n", $data['title'],$app,$checked, $disabled); // Cria nova linha $applications_list .= sprintf(' %s%s%s ',$this->nextmatchs->alternate_row_color(), $app_col1, $app_col2, $app_col3); } $i++; } return $applications_list; } } ?>