Пример #1
0
 /**
  * Duplica un objeto y sus dependencias recursivamente.
  * En el caso del datos tabla, si el proyecto/fuente no difiere no se clona, se reusa
  *
  * @param array $nuevos_datos Datos a modificar en la base del objeto. 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 objeto que resulta del clonado
  */
 function clonar($nuevos_datos, $dir_subclases = false, $con_transaccion = true)
 {
     $distinto = false;
     //-- Si difiere en el proyecto
     if (isset($nuevos_datos['fuente_datos_proyecto']) && $nuevos_datos['fuente_datos_proyecto'] != $this->datos['_info']['fuente_proyecto']) {
         $distinto = true;
     }
     //-- Si difiere en la fuente
     if (isset($nuevos_datos['fuente_datos']) && $nuevos_datos['fuente_datos'] != $this->datos['_info']['fuente']) {
         $distinto = true;
     }
     //Cambiar el punto de montaje no implica clonar, se tiene que hacer una personalizacion que cambie la subclase.
     if ($distinto) {
         return parent::clonar($nuevos_datos, $dir_subclases, $con_transaccion);
     } else {
         //Se retorna a si mismo, se reusa
         $clave = array();
         $clave['componente'] = $this->datos['_info']['objeto'];
         $clave['proyecto'] = $this->datos['_info']['proyecto'];
         return $clave;
     }
 }