Ejemplo n.º 1
0
 function cambiar_predeterminada($nombre)
 {
     $proyecto = toba_editor::get_proyecto_cargado();
     $usuario = toba::usuario()->get_id();
     abrir_transaccion('instancia');
     //Actualiza las otras fotos
     $sql = "UPDATE apex_admin_album_fotos \n\t\t\t\tSET predeterminada = 0 \n\t\t\t\tWHERE \n\t\t\t\t\tproyecto = '{$proyecto}' AND\n\t\t\t\t\tusuario = '{$usuario}' AND\n\t\t\t\t\tfoto_tipo = '{$this->tipo}' AND\n\t\t\t\t\tfoto_nombre != '{$nombre}'\n\t\t";
     toba::db()->ejecutar($sql);
     //Actualiza la nueva predeterminada
     $sql = "UPDATE apex_admin_album_fotos \n\t\t\t\tSET predeterminada = 1 - COALESCE(predeterminada, 0)\n\t\t\t\tWHERE \n\t\t\t\t\tproyecto = '{$proyecto}' AND\n\t\t\t\t\tusuario = '{$usuario}' AND\n\t\t\t\t\tfoto_tipo = '{$this->tipo}' AND\n\t\t\t\t\tfoto_nombre = '{$nombre}'\n\t\t";
     toba::db()->ejecutar($sql);
     cerrar_transaccion('instancia');
 }
Ejemplo n.º 2
0
 function ejecutar($id_item, $retorno_opciones_generacion = null, $con_transaccion = true)
 {
     try {
         abrir_transaccion();
         foreach ($this->moldes as $molde) {
             $molde->generar();
         }
         $this->generar_archivos_consultas();
         $this->guardar_log_elementos_generados();
         cerrar_transaccion();
         toba::notificacion()->agregar('La generación se realizó exitosamente', 'info');
         return $this->log_elementos_creados;
     } catch (toba_error $e) {
         toba::logger()->error($e);
         toba::notificacion()->agregar("Fallo en la generación: " . $e->getMessage(), 'error');
         abortar_transaccion();
     }
 }
Ejemplo n.º 3
0
 /**
  * Sincroniza los cambios en los registros de esta tabla con la base de datos
  * Sólo se utiliza cuando la tabla no está involucrada en algun datos_relacion, sino 
  * la sincronización es guiada por ese objeto
  * @return integer Cantidad de registros modificados
  * @throws toba_error En case de error en la sincronizacion, se aborta la transaccion (si se esta utilizando)
  */
 function sincronizar($filas = array())
 {
     $this->log("Inicio SINCRONIZAR");
     try {
         if ($this->_utilizar_transaccion) {
             abrir_transaccion($this->_fuente);
         }
         $this->evt__pre_sincronizacion();
         $modificaciones = 0;
         $modificaciones += $this->sincronizar_eliminados($filas);
         $modificaciones += $this->sincronizar_insertados($filas);
         $modificaciones += $this->sincronizar_actualizados($filas);
         $this->evt__post_sincronizacion();
         if ($this->_utilizar_transaccion) {
             cerrar_transaccion($this->_fuente);
         }
         $this->log("Fin SINCRONIZAR: {$modificaciones}.");
         return $modificaciones;
     } catch (toba_error $e) {
         if ($this->_utilizar_transaccion) {
             toba::logger()->info("Abortando transacción en {$this->_fuente}", 'toba');
             abortar_transaccion($this->_fuente);
         }
         toba::logger()->debug("Relanzando excepción. " . $e, 'toba');
         throw $e;
     }
 }
Ejemplo n.º 4
0
 function evt__procesar()
 {
     abrir_transaccion('instancia');
     $directorio = false;
     if ($this->datos['con_subclases']) {
         $directorio = $this->datos['carpeta_subclases'];
     }
     list($proyecto_actual, $comp_actual) = toba::zona()->get_editable();
     $id = array('proyecto' => $proyecto_actual, 'componente' => $comp_actual);
     $info = toba_constructor::get_info($id, null, $this->datos['profundidad']);
     $nuevos_datos = array('anexo_nombre' => $this->datos['anexo_nombre']);
     $clon = $info->clonar($nuevos_datos, $directorio, false);
     //--- Asignación
     if (isset($this->destino)) {
         $asignador = new asignador_objetos($clon, $this->destino);
         $asignador->asignar();
     }
     cerrar_transaccion('instancia');
     admin_util::redireccionar_a_editor_objeto($clon['proyecto'], $clon['objeto']);
 }
Ejemplo n.º 5
0
 /**
  * Elimina cada elemento de las tabla de la relación y luego sincroniza con la base
  * Todo el proceso se ejecuta dentro de una transacción, si se definio así
  */
 function eliminar_todo()
 {
     $fuente = $this->objeto_relacion->get_fuente();
     try {
         if ($this->_utilizar_transaccion) {
             abrir_transaccion($fuente);
             if ($this->_retrazar_constraints) {
                 toba::db($fuente)->retrazar_constraints();
             }
         }
         $this->evt__pre_eliminacion();
         $this->eliminar_plan();
         $this->evt__post_eliminacion();
         if ($this->_utilizar_transaccion) {
             cerrar_transaccion($fuente);
         }
     } catch (toba_error $e) {
         if ($this->_utilizar_transaccion) {
             abortar_transaccion($fuente);
         }
         throw $e;
     }
 }
Ejemplo n.º 6
0
 function crear_item($nombre, $padre)
 {
     try {
         abrir_transaccion();
         $item = new toba_item_molde($this);
         $item->set_nombre($nombre);
         $item->set_carpeta_item($padre);
         $item->cargar_grupos_acceso_activos();
         $item->generar();
         $clave = $item->get_clave_componente_generado();
         cerrar_transaccion();
         return $clave;
     } catch (toba_error $e) {
         toba::logger()->error($e);
         toba::notificacion()->agregar("Fallo en la generación: " . $e->getMessage(), 'error');
         abortar_transaccion();
     }
 }
Ejemplo n.º 7
0
 /**
  * Duplica un item y sus dependencias recursivamente
  *
  * @param array $nuevos_datos Datos a modificar en la base del item. Para anexar algo al nombre se utiliza el campo 'anexo_nombre'
  * @param boolean/string $dir_subclases Si el componente tiene subclases clona los archivos, en caso afirmativo indicar la ruta destino (relativa)
  * @param boolean $con_transaccion	Indica si la clonación se debe incluír en una transaccion
  * @return array Clave del item que resulta del clonado
  */
 function clonar($nuevos_datos, $dir_subclases = false, $con_transaccion = true)
 {
     $campos_extra = array('fuente_datos', 'fuente_datos_proyecto');
     //-- Cargo el DR asociado
     $id_dr = toba_info_editores::get_dr_de_clase('toba_item');
     $componente = array('proyecto' => $id_dr[0], 'componente' => $id_dr[1]);
     $dr = toba_constructor::get_runtime($componente);
     $dr->inicializar();
     $dr->cargar(array('proyecto' => $this->proyecto, 'item' => $this->id));
     foreach ($nuevos_datos as $campo => $valor) {
         if ($campo == 'anexo_nombre') {
             $campo = 'nombre';
             $valor = $valor . $dr->tabla('base')->get_fila_columna(0, $campo);
         }
         if (!in_array($campo, $campos_extra)) {
             $dr->tabla('base')->set_fila_columna_valor(0, $campo, $valor);
         }
     }
     //Se le fuerza una inserción a los datos_tabla
     //Como la clave de los objetos son secuencias, esto garantiza claves nuevas
     $dr->forzar_insercion();
     $dr->persistidor()->desactivar_transaccion();
     if ($con_transaccion) {
         abrir_transaccion('instancia');
     }
     if (isset($nuevos_datos['fuente_datos'])) {
         $dr->tabla('permisos_tablas')->set_columna_valor('fuente_datos', $nuevos_datos['fuente_datos']);
     }
     //--- Se clonan los hijos y se agregan como dependencias
     $dr->tabla('objetos')->eliminar_filas();
     $i = 0;
     foreach ($this->subelementos as $hijo) {
         //-- Si se especifico un proyecto, se propaga
         $datos_objeto = array();
         if (isset($nuevos_datos['proyecto'])) {
             $datos_objeto['proyecto'] = $nuevos_datos['proyecto'];
         }
         //-- Si se especifica un anexo de nombre, se propaga
         if (isset($nuevos_datos['anexo_nombre'])) {
             $datos_objeto['anexo_nombre'] = $nuevos_datos['anexo_nombre'];
         }
         //-- La fuente tambien se propaga
         if (isset($nuevos_datos['fuente_datos_proyecto'])) {
             $datos_objeto['fuente_datos_proyecto'] = $nuevos_datos['fuente_datos_proyecto'];
         }
         if (isset($nuevos_datos['fuente_datos'])) {
             $datos_objeto['fuente_datos'] = $nuevos_datos['fuente_datos'];
         }
         //-- Punto de montaje tambien se propaga
         if (isset($nuevos_datos['punto_montaje'])) {
             $datos_objeto['punto_montaje'] = $nuevos_datos['punto_montaje'];
         }
         $nuevo_hijo = $hijo->clonar($datos_objeto, $dir_subclases, false);
         $fila = array('objeto' => $nuevo_hijo['componente'], 'proyecto' => $nuevo_hijo['proyecto'], 'orden' => $i);
         $dr->tabla('objetos')->nueva_fila($fila);
         $i++;
     }
     //--- GRABA
     $dr->sincronizar();
     if ($con_transaccion) {
         cerrar_transaccion('instancia');
     }
     //Se busca la clave del nuevo objeto
     $clave = $dr->tabla('base')->get_clave_valor(0);
     $clave['componente'] = $clave['item'];
     return $clave;
 }