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'); }
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(); } }
/** * 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; } }
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']); }
/** * 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; } }
function SetUp() { abrir_transaccion('instancia'); }
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(); } }
function SetUp() { abrir_transaccion(); }
/** * 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; }