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;
		}
	}
?>