Beispiel #1
0
 public function read($uri, $justthese = false)
 {
     $map = Config::get($uri['concept'], 'OpenLDAP.mapping');
     if ($justthese === false || $justthese === null) {
         $sr = ldap_search($this->con, $this->config['context'], '(' . $map['id'] . '=' . $uri['id'] . ')');
     } else {
         $sr = ldap_search($this->con, $this->config['context'], '(' . $map['id'] . '=' . $uri['id'] . ')', self::parseJustthese($justthese, $map));
     }
     if (!$sr) {
         return false;
     }
     $return = self::_formatEntries(ldap_get_entries($this->con, $sr), $map);
     return isset($return[0]) ? $return[0] : array();
 }
 /**
  * Atualiza um contato recente
  *
  * @license    http://www.gnu.org/copyleft/gpl.html GPL
  * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
  * @sponsor    Caixa Econômica Federal
  * @author     José Vicente Tezza Jr. 
  * @return     retorna a uri do contato recente
  * @access     public
  * */
 function put($request, $id)
 {
     $this->secured();
     //verificar se a preferencia de contatos dinamicos nao esta ativada
     if (!$this->isEnabledDynamicContacts(Config::me("uidNumber"))) {
         $response = new Response($request);
         $this->createException($request, $response, Response::UNAUTHORIZED, 'Resource unauthorized', 'disabled dynamic contacts preference');
         return $response;
     }
     $post = $request->dataDecoded;
     $response = new Response($request);
     if (count($post) == 0) {
         $this->createException($request, $response, Response::BADREQUEST, 'Bad request', 'Invalid template data');
         return $response;
     }
     //recupera os atributos definidos no conceito 'user'
     $map = Config::get('dynamicContact', 'PostgreSQL.mapping');
     $params = array();
     foreach ($post as $key => $value) {
         if (!isset($map[$key]) || $key == 'id' || $key == 'timestamp' || $key == 'number_of_messages') {
             continue;
         }
         $params[$key] = $value;
     }
     if (count($params) == 0) {
         $this->createException($request, $response, Response::BADREQUEST, 'Bad request', 'Invalid template data');
         return $response;
     }
     //completar os atributos
     $params['owner'] = Config::me("uidNumber");
     $params['timestamp'] = time();
     $params['id'] = $id;
     $response->addHeader('Content-type', 'aplication/json');
     $response->code = Response::NOCONTENT;
     try {
         $dynamicContact = Controller::read(array('concept' => 'dynamicContact'), false, array('filter' => array('AND', array('=', 'owner', Config::me("uidNumber")), array('=', 'id', $id))));
         //Se existe o recurso
         if ($dynamicContact) {
             //Normaliza o recurso
             if (is_array($dynamicContact)) {
                 $dynamicContact = $dynamicContact[0];
             }
             $params['number_of_messages'] = $dynamicContact['number_of_messages'] + 1;
             $dynamicContact = Controller::update(array('concept' => 'dynamicContact', 'id' => $id), $params);
             if (!$dynamicContact) {
                 $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', Controller::service('PostgreSQL')->error);
                 return $response;
             }
         } else {
             /*
             $idDynamicContact = Controller::create(	array('concept' => 'dynamicContact'), $params);
             */
             //if (!$idDynamicContact) {
             $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Invalid data');
             return $response;
             //}
         }
     } catch (Exception $ex) {
         $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', 'Internal Server Error');
         return $response;
     }
     $response->body = json_encode(null);
     return $response;
 }
Beispiel #3
0
 /**
  * Retorna uma lista de usuários
  *
  * @license    http://www.gnu.org/copyleft/gpl.html GPL
  * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
  * @sponsor    Caixa Econômica Federal
  * @author     José Vicente Tezza Jr. 
  * @return     Retorna uma lista de usuários do LDAP
  * @access     public
  * */
 function get($request)
 {
     $response = new Response($request);
     $response->addHeader('Content-type', 'aplication/json');
     $response->code = Response::OK;
     $h = new Hypermedia();
     $c = new Collection($request->resources, 'UsersResource');
     $this->secured();
     try {
         //Executa uma consulta de usuários do LDAP a partir de um determinado atributo e valor
         if (isset($_GET['field']) && isset($_GET['value'])) {
             //recupera os atributos definidos no conceito 'user'
             $map = Config::get('user', 'OpenLDAP.mapping');
             //verifica se o campo(atributo) passado pelo usuário está definido no conceito 'user'
             if (isset($map[$_GET['field']])) {
                 $users = Controller::find(array('concept' => 'user', 'service' => 'OpenLDAP'), false, array('filter' => array('=', $_GET['field'], $_GET['value']), 'notExternal' => true));
             } else {
                 //lança warning no log do Expresso
                 trigger_error("Invalid field (" . $_GET['field'] . ") in the query.", E_USER_WARNING);
                 //formata os atributos LDAP do conceito 'user'
                 $attributes = implode(', ', $map);
                 //Configura o erro na hypermedia
                 $error = new Error();
                 $error->setCode(Response::NOTFOUND);
                 $error->setTitle('UserLDAP not found');
                 $error->setDescription("Invalid field (" . $_GET['field'] . ") in the query. Use of these: " . $attributes);
                 $c->setError($error);
                 $h->setCollection($c);
                 //retorna a hypermedia
                 $response->code = Response::NOTFOUND;
                 $response->body = $h->getHypermedia($request->accept[10][0]);
                 return $response;
             }
         } else {
             //Executa a consulta dos primeiros 20 usuarios do LDAP
             $users = Controller::find(array('concept' => 'user', 'service' => 'OpenLDAP'), false, array('filter' => array('=', 'phpgwAccountType', 'u'), 'limit' => 20, 'notExternal' => true));
         }
         //Se nao foi encontrado usuarios na consulta
         if ($users === false) {
             $error = new Error();
             $error->setCode(Response::NOTFOUND);
             $error->setTitle('UserLDAP not found');
             $error->setDescription('Users not found.');
             $c->setError($error);
             $h->setCollection($c);
             $response->code = Response::NOTFOUND;
             $response->body = $h->getHypermedia($request->accept[10][0]);
             return $response;
         }
         foreach ($users as $value) {
             $d = new Data();
             $i = new Item($request->resources, 'UsersResource', $value['uid']);
             $d->setName('name');
             $d->setValue($value['name']);
             $d->setPrompt('Nome do Usuario');
             $d->setDataType('string');
             $d->setMaxLength('100');
             $d->setMinLength(null);
             $d->setRequired(true);
             $i->addData($d);
             $d = new Data();
             $d->setName('email');
             $d->setValue($value['mail']);
             $d->setPrompt('Email do Usuario');
             $d->setDataType('string');
             $d->setMaxLength('100');
             $d->setMinLength(null);
             $d->setRequired(true);
             $i->addData($d);
             $d = new Data();
             $d->setName('telephoneNumber');
             $d->setValue($value['telephoneNumber']);
             $d->setPrompt('Telefone do Usuario');
             $d->setDataType('string');
             $d->setMaxLength('100');
             $d->setMinLength(null);
             $d->setRequired(true);
             $i->addData($d);
             $d = new Data();
             $d->setName('vacationActive');
             $d->setValue($value['vacationActive']);
             $d->setPrompt('Status da Regra fora de Escritorio');
             $d->setDataType('boolean');
             $d->setMaxLength('10');
             $d->setMinLength(null);
             $d->setRequired(null);
             $i->addData($d);
             $d = new Data();
             $d->setName('vacationInfo');
             $d->setValue($value['vacationInfo']);
             $d->setPrompt('Mensagem da Regra fora de Escritorio');
             $d->setDataType('boolean');
             $d->setMaxLength('10');
             $d->setMinLength(null);
             $d->setRequired(null);
             $i->addData($d);
             $l = new Link();
             $l->setHref('');
             $l->setRel('delete');
             $l->setAlt('Remover');
             $l->setPrompt('Remover');
             $l->setRender('link');
             $i->addLink($l);
             $l = new Link();
             $l->setHref('');
             $l->setRel('put');
             $l->setAlt('Atualizar');
             $l->setPrompt('Atualizar');
             $l->setRender('link');
             $i->addLink($l);
             $l = new Link();
             $l->setHref('/userldap/' . $value['uid']);
             $l->setRel('get');
             $l->setAlt('Buscar');
             $l->setPrompt('Buscar');
             $l->setRender('link');
             $i->addLink($l);
             $c->addItem($i);
         }
         $t = new Template();
         $d = new Data();
         $d->setName('name');
         $d->setValue(null);
         $d->setPrompt('Nome do Usuario');
         $d->setDataType('string');
         $d->setMaxLength(100);
         $d->setMinLength(null);
         $d->setRequired(true);
         $t->addData($d);
         $d = new Data();
         $d->setName('email');
         $d->setValue(null);
         $d->setPrompt('Email do Usuario');
         $d->setDataType('string');
         $d->setMaxLength(100);
         $d->setMinLength(null);
         $d->setRequired(true);
         $t->addData($d);
         $d = new Data();
         $d->setName('telefone');
         $d->setValue(null);
         $d->setPrompt('Telefone do Usuario');
         $d->setDataType('string');
         $d->setMaxLength(100);
         $d->setMinLength(null);
         $d->setRequired(true);
         $t->addData($d);
         $queries = new Querie();
         $queries->setHref($c->href);
         $queries->setData('field', '', true);
         $queries->setData('value', '', true);
         $c->addQueries($queries);
         $h->setCollection($c);
     } catch (Exception $ex) {
         $error = new Error();
         $error->setCode(Response::INTERNALSERVERERROR);
         $error->setTitle('Internal Server Error');
         $error->setDescription($ex);
         $c->setError($error);
         $h->setCollection($c);
         $response->code = Response::INTERNALSERVERERROR;
         $response->body = $h->getHypermedia($request->accept[10][0]);
         return $response;
     }
     $response->body = $h->getHypermedia($request->accept[10][0]);
     return $response;
 }
Beispiel #4
0
 private function parseCondition($condition)
 {
     $tables = array();
     $conditions = '';
     $matches = array();
     if (preg_match_all('/\\s*(AND|^)\\s*([a-z]+)\\.([a-z]+)\\s+\\=\\s+([a-z]+)\\.([a-z]+)(\\s|$)+/i', $condition, $matches, PREG_SET_ORDER)) {
         foreach ($matches as $i => $v) {
             if (!isset($this->maps[$v[2]]) || !isset($this->tables[$v[2]])) {
                 $this->maps[$v[2]] = Config::get($v[2], 'MySQL.mapping');
                 $this->tables[$v[2]] = Config::get($v[2], 'MySQL.concept');
             }
             if (!isset($this->maps[$v[4]]) || !isset($this->tables[$v[4]])) {
                 $this->maps[$v[4]] = Config::get($v[4], 'MySQL.mapping');
                 $this->tables[$v[4]] = Config::get($v[4], 'MySQL.concept');
             }
             if (isset($this->maps[$v[2]][$v[3]]) && isset($this->maps[$v[4]][$v[5]])) {
                 $conditions .= ' ' . $v[1] . ' ' . $this->tables[$v[2]] . '.' . $this->maps[$v[2]][$v[3]] . ' = ' . $this->tables[$v[4]] . '.' . $this->maps[$v[4]][$v[5]];
             } else {
                 continue;
             }
             if (!in_array($this->tables[$v[2]], $tables)) {
                 $tables[] = $this->tables[$v[2]];
             }
             if (!in_array($this->tables[$v[4]], $tables)) {
                 $tables[] = $this->tables[$v[4]];
             }
         }
     }
     if (preg_match_all('/\\s*(AND|OR|^)\\s*([a-z]+)\\.([a-z]+)\\s+([\\=\\>\\<\\!]+|like)+\\s+([a-z0-9\\/\\+\\=]+)(\\s|$)+/i', $condition, $matches, PREG_SET_ORDER)) {
         foreach ($matches as $i => $v) {
             if (!isset($this->maps[$v[2]]) || !isset($this->tables[$v[2]])) {
                 $this->maps[$v[2]] = Config::get($v[2], 'MySQL.mapping');
                 $this->tables[$v[2]] = Config::get($v[2], 'MySQL.concept');
             }
             if (isset($this->maps[$v[2]][$v[3]])) {
                 $conditions .= ' ' . $v[1] . ' ' . $this->tables[$v[2]] . '.' . $this->maps[$v[2]][$v[3]] . ' ' . $v[4] . ' \'' . mysql_real_escape_string(base64_decode($v[5])) . '\'';
             } else {
                 continue;
             }
             if (!in_array($this->tables[$v[2]], $tables)) {
                 $tables[] = $this->tables[$v[2]];
             }
         }
     }
     return count($tables) > 0 && count($conditions) > 0 ? array('tables' => $tables, 'conditions' => $conditions) : '';
 }
 /**
  * Salva um contato recente
  *
  * @license    http://www.gnu.org/copyleft/gpl.html GPL
  * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
  * @sponsor    Caixa Econômica Federal
  * @author     José Vicente Tezza Jr. 
  * @return     retorna a uri do contato recente
  * @access     public
  * */
 function post($request)
 {
     $this->secured();
     //verificar se a preferencia de contatos dinamicos nao esta ativada
     if (!$this->isEnabledDynamicContacts(Config::me("uidNumber"))) {
         $response = new Response($request);
         $this->createException($request, $response, Response::UNAUTHORIZED, 'Resource unauthorized', 'disabled dynamic contacts preference');
         return $response;
     }
     if (count($_POST) == 0) {
         $response = new Response($request);
         $response->code = Response::INTERNALSERVERERROR;
         return $response;
     }
     //recuperar os atributos definidos no conceito 'user'
     $map = Config::get('dynamicContact', 'PostgreSQL.mapping');
     $params = array();
     foreach ($_POST as $key => $value) {
         if (!isset($map[$key]) || $key == 'id' || $key == 'timestamp' || $key == 'number_of_messages') {
             continue;
         }
         $params[$key] = $value;
     }
     if (count($params) == 0) {
         $response = new Response($request);
         $response->code = Response::INTERNALSERVERERROR;
         return $response;
     }
     $response = new Response($request);
     $response->addHeader('Content-type', 'aplication/json');
     $response->code = Response::CREATED;
     //completar os atributos
     $params['owner'] = Config::me("uidNumber");
     $params['number_of_messages'] = '1';
     $params['timestamp'] = time();
     try {
         //verificar o limite maximo de contatos dinamicos nas preferencias do administrador
         $sql = "SELECT config_value " . "FROM phpgw_config " . "WHERE config_app = 'expressoMail' " . "AND config_name = 'expressoMail_Number_of_dynamic_contacts'";
         $numberOfMessages = Controller::service('PostgreSQL')->execResultSql($sql, true);
         $numberOfMessages = count($numberOfMessages) > 0 ? (int) $numberOfMessages['config_value'] : 0;
         //realizar busca de contatos dinamicos ordenados pela data de utilizacao
         $dynamicContacts = Controller::find(array('concept' => 'dynamicContact'), false, array('filter' => array('=', 'owner', Config::me("uidNumber")), 'order' => array('timestamp')));
         $numberOfDynamicContacts = $dynamicContacts !== false ? count($dynamicContacts) : 0;
         //se a quantidade de contatos dinamicos de usuario exceder o limite maximo definido nas preferencias do administrador,
         //remover o contato dinamico mais antigo
         if ($numberOfMessages > 0 && $numberOfDynamicContacts >= $numberOfMessages) {
             $id = $dynamicContacts[0]['id'];
             $delete = Controller::delete(array('concept' => 'dynamicContact', 'id' => $id));
             if (!$delete) {
                 $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', Controller::service('PostgreSQL')->error);
                 return $response;
             }
         }
         //inserir o novo contato dinamico
         $create = Controller::create(array('concept' => 'dynamicContact'), $params);
         if (!$create) {
             throw new Exception(Controller::service('PostgreSQL')->error);
         }
     } catch (Exception $ex) {
         $response->code = Response::INTERNALSERVERERROR;
         return $response;
     }
     $response->body = json_encode(null);
     return $response;
 }