+ $rta = array ();
+ foreach (SAMURAI_Perfil::_getIdPerfiles($db, $filtro, $id_sistema) as $id) {
+ $tmp = new SAMURAI_Perfil($db,$id);
+ array_push($rta, $tmp);
+ }
+ return $rta;
+ }
+ // -X2C
+
+ // +X2C Operation 356
+ /**
+ * Devuelve la informacion de los perfiles en un array.
+ *
+ * @param SAMURAI_DB $db Base de Datos
+ * @param string $filtro Filtro por descripcion del perfil
+ *
+ * @return array()
+ * @access public
+ * @static
+ */
+ function getArrayPerfiles($db, $filtro = null) // ~X2C
+ {
+ //FORECHEO LO QUE ME DEVUELVA GET PERMISOS
+ $rta = array ();
+ foreach (SAMURAI_Perfil::getPerfiles($db, $filtro) as $perfil) {
+ $rta[$perfil->getId()] = $perfil->getDescripcion();
+ }
+ return $rta;
+ }
+ // -X2C
+
+ // +X2C Operation 358
+ /**
+ * Valida la existencia de un perfil con la descripcion que se pasa por parametro. Devuelve true si existe y false si no existe.
+ *
+ * @param SAMURAI_DB $db Base de Datos
+ * @param string $descripcion Descripcion a comparar
+ *
+ * @return bool
+ * @access public
+ * @static
+ */
+ function existePerfil($db, $descripcion) // ~X2C
+ {
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['obtener_datos_perfil'].$sql['obtener_datos_perfil3'];
+ $dbh = $db->prepare($tmp);
+ $tmp = array ($descripcion);
+ $res = $db->execute($dbh,$tmp);
+ $re = $res->fetchRow();
+ if (is_null($re)) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ // -X2C
+
+ // +X2C Operation 360
+ /**
+ * Valida la existencia de una asociacion entre el perfil y el sistema seleccionado. Devuelve true si existe y false en caso contraro.
+ *
+ * @param SAMURAI_DB $db Base de Datos
+ * @param int $id_perfil Identificador del perfil con el cual hacer la comparacion
+ * @param int $id_sistema Identificador del sistema con el cual hacer la compararcion
+ *
+ * @return bool
+ * @access public
+ * @static
+ */
+ function existeAsociacion($db, $id_perfil, $id_sistema) // ~X2C
+ {
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['verificar_asociacion'];
+ $dbh = $db->prepare($tmp);
+ $tmp = array ($id_perfil, $id_sistema);
+ $res = $db->execute($dbh,$tmp);
+ $re = $res->fetchRow();
+ if (is_null($re)) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ }
+ // -X2C
+
+ // +X2C Operation 362
+ /**
+ * Se encarga de guardar la relacion entre perfiles - permisos - sistemas
+ *
+ * @return mixed
+ * @access protected
+ */
+ function _guardarPermisos() // ~X2C
+ {
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+ $res = $this->_verifPermisos();
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+
+ //GRABO EN PERM_PERFIL_SIST
+ $datos = array ('id_permiso', 'id_perfil', 'id_sistema', 'observaciones', 'responsable');
+ $re = $this->_db->autoPrepare('perm_perfil_sist', $datos, DB_AUTOQUERY_INSERT);
+ foreach ($this->getPermisos() as $permiso) {
+ list($id, $obs) = split ('##',$permiso);
+ $datos = array ($id, $this->getId(), $_SESSION['samurai']['id_sistema'], $obs, $this->getResponsable());
+ $res = $this->_db->execute($re, $datos);
+ if (PEAR::isError($res)) {
+ return $res;
+ }
+ }
+ }
+ // -X2C
+
+ // +X2C Operation 363
+ /**
+ * Borra la asociacion de un perfil de un sistema con sus permisos
+ *
+ * @return mixed
+ * @access protected
+ */
+ function _borrarPermisos() // ~X2C
+ {
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['borrar_permisos'];
+ $dbh = $this->_db->prepare($tmp);
+ $tmp = array ($this->getId(), $_SESSION['samurai']['id_sistema']);
+ return $this->_db->execute($dbh,$tmp);
+ }
+ // -X2C
+
+ // +X2C Operation 376
+ /**
+ * Verifica si se puede insertar
+ *
+ * @return mixed
+ * @access protected
+ */
+ function _verifPermisos() // ~X2C
+ {
+ //VERIFICO QUE NO HAYA UN PERFIL CON LOS MISMOS PERMISOS YA ASIGNADO AL SISTEMA
+ $sql = parse_ini_file(dirname(__FILE__) . '/Perfil/consultas.ini', true);
+ $tmp = $sql['verif_perm_perfil_sist'];
+ $dbh = $this->_db->prepare($tmp);
+ $tmp = array ($_SESSION['samurai']['id_sistema']);
+ $res = $this->_db->execute($dbh,$tmp);
+ $perm = array();
+ while ($re = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
+ $perm[$re['id_perfil']][] = $re['id_permiso'].'##'.$re['observaciones'];
+ }
+ foreach ($perm as $key => $p) {
+ $rta1 = array_diff($p, $this->getPermisos());
+ $rta2 = array_diff($this->getPermisos(), $p);
+ if (!$rta1 && !$rta2) {
+ $perf = new SAMURAI_Perfil($this->_db, $key);
+ if ($perf->getDescripcion() != $this->getDescripcion()) {
+ return new PEAR_Error("El perfil \"".$perf->getDescripcion()."\" contiene los mismos permisos.");
+ }
+ }
+ }
+ return true;