示例#1
0
文件: view.html.php 项目: kenjs/Goteo
    Goteo\Model\Blog,
    Goteo\Library\Text;

$project = $this['project'];
$show    = $this['show'];
$step    = $this['step'];
$post    = $this['post'];
$blog    = $this['blog'];
$thread    = $this['thread'];

$user    = $_SESSION['user'];
$personalData = ($user instanceof User) ? User::getPersonal($user->id) : new stdClass();

$categories = Category::getNames($project->id);

$skills = Skill::getNames($project->id);

if (!empty($project->investors)) {
    $supporters = ' (' . $project->num_investors . ')';
} else {
    $supporters = '';
}
if (!empty($project->messages)) {
    $messages = ' (' . $project->num_messages . ')';
} else {
    $messages = '';
}
if (!empty($blog->posts)) {
    $updates = ' (' . count($blog->posts) . ')';
} else {
    $updates = '';
示例#2
0
文件: project.php 项目: kenjs/Goteo
 /**
  * actualiza en la tabla los datos del proyecto
  * @param array $project->errors para guardar los errores de datos del formulario, los errores de proceso se guardan en $project->errors['process']
  */
 public function save(&$errors = array())
 {
     if ($this->dontsave) {
         return false;
     }
     if (!$this->validate($errors)) {
         return false;
     }
     try {
         // fail para pasar por todo antes de devolver false
         $fail = false;
         // los nif sin guiones, espacios ni puntos
         $this->contract_nif = str_replace(array('_', '.', ' ', '-', ',', ')', '('), '', $this->contract_nif);
         $this->entity_cif = str_replace(array('_', '.', ' ', '-', ',', ')', '('), '', $this->entity_cif);
         // Image
         if (is_array($this->image) && !empty($this->image['name'])) {
             $image = new Image($this->image);
             if ($image->save($errors)) {
                 $this->gallery[] = $image;
                 $this->image = $image->id;
                 /**
                  * Guarda la relación NM en la tabla 'project_image'.
                  */
                 if (!empty($image->id)) {
                     self::query("REPLACE project_image (project, image) VALUES (:project, :image)", array(':project' => $this->id, ':image' => $image->id));
                 }
             }
         }
         $fields = array('contract_name', 'contract_nif', 'contract_email', 'contract_entity', 'contract_birthdate', 'entity_office', 'entity_name', 'entity_cif', 'phone', 'address', 'zipcode', 'location', 'country', 'secondary_address', 'post_address', 'post_zipcode', 'post_location', 'post_country', 'name', 'subtitle', 'image', 'description', 'motivation', 'video', 'video_usubs', 'about', 'goal', 'related', 'reward', 'keywords', 'media', 'media_usubs', 'currently', 'project_location', 'scope', 'resource', 'comment', 'evaluation');
         $set = '';
         $values = array();
         foreach ($fields as $field) {
             if ($set != '') {
                 $set .= ', ';
             }
             $set .= "{$field} = :{$field}";
             $values[":{$field}"] = $this->{$field};
         }
         // Solamente marcamos updated cuando se envia a revision desde el superform o el admin
         //				$set .= ", updated = :updated";
         //				$values[':updated'] = date('Y-m-d');
         $values[':id'] = $this->id;
         $sql = "UPDATE project SET " . $set . " WHERE id = :id";
         if (!self::query($sql, $values)) {
             $errors[] = $sql . '<pre>' . print_r($values, 1) . '</pre>';
             $fail = true;
         }
         //                echo "$sql<br />";
         // y aquí todas las tablas relacionadas
         // cada una con sus save, sus new y sus remove
         // quitar las que tiene y no vienen
         // añadir las que vienen y no tiene
         //categorias
         $tiene = Project\Category::get($this->id);
         $viene = $this->categories;
         $quita = array_diff_assoc($tiene, $viene);
         $guarda = array_diff_assoc($viene, $tiene);
         foreach ($quita as $key => $item) {
             $category = new Project\Category(array('id' => $item, 'project' => $this->id));
             if (!$category->remove($errors)) {
                 $fail = true;
             }
         }
         foreach ($guarda as $key => $item) {
             if (!$item->save($errors)) {
                 $fail = true;
             }
         }
         // recuperamos las que le quedan si ha cambiado alguna
         if (!empty($quita) || !empty($guarda)) {
             $this->categories = Project\Category::get($this->id);
         }
         //skills
         $tiene = Project\Skill::get($this->id);
         $viene = $this->skills;
         $quita = array_diff_assoc($tiene, $viene);
         $guarda = array_diff_assoc($viene, $tiene);
         foreach ($quita as $key => $item) {
             $skill = new Project\Skill(array('id' => $item, 'project' => $this->id));
             if (!$skill->remove($errors)) {
                 $fail = true;
             }
         }
         foreach ($guarda as $key => $item) {
             if (!$item->save($errors)) {
                 $fail = true;
             }
         }
         // recuperamos las que le quedan si ha cambiado alguna
         if (!empty($quita) || !empty($guarda)) {
             $this->skills = Project\Skill::get($this->id);
         }
         //costes
         $tiene = Project\Cost::getAll($this->id);
         $viene = $this->costs;
         $quita = array_diff_key($tiene, $viene);
         $guarda = array_diff_key($viene, $tiene);
         foreach ($quita as $key => $item) {
             if (!$item->remove($errors)) {
                 $fail = true;
             } else {
                 unset($tiene[$key]);
             }
         }
         foreach ($guarda as $key => $item) {
             if (!$item->save($errors)) {
                 $fail = true;
             }
         }
         /* Ahora, los que tiene y vienen. Si el contenido es diferente, hay que guardarlo*/
         foreach ($tiene as $key => $row) {
             // a ver la diferencia con el que viene
             if ($row != $viene[$key]) {
                 if (!$viene[$key]->save($errors)) {
                     $fail = true;
                 }
             }
         }
         if (!empty($quita) || !empty($guarda)) {
             $this->costs = Project\Cost::getAll($this->id);
         }
         // recalculo de minmax
         $this->minmax();
         //retornos colectivos
         $tiene = Project\Reward::getAll($this->id, 'social');
         $viene = $this->social_rewards;
         $quita = array_diff_key($tiene, $viene);
         $guarda = array_diff_key($viene, $tiene);
         foreach ($quita as $key => $item) {
             if (!$item->remove($errors)) {
                 $fail = true;
             } else {
                 unset($tiene[$key]);
             }
         }
         foreach ($guarda as $key => $item) {
             if (!$item->save($errors)) {
                 $fail = true;
             }
         }
         /* Ahora, los que tiene y vienen. Si el contenido es diferente, hay que guardarlo*/
         foreach ($tiene as $key => $row) {
             // a ver la diferencia con el que viene
             if ($row != $viene[$key]) {
                 if (!$viene[$key]->save($errors)) {
                     $fail = true;
                 }
             }
         }
         if (!empty($quita) || !empty($guarda)) {
             $this->social_rewards = Project\Reward::getAll($this->id, 'social');
         }
         //recompenssas individuales
         $tiene = Project\Reward::getAll($this->id, 'individual');
         $viene = $this->individual_rewards;
         $quita = array_diff_key($tiene, $viene);
         $guarda = array_diff_key($viene, $tiene);
         foreach ($quita as $key => $item) {
             if (!$item->remove($errors)) {
                 $fail = true;
             } else {
                 unset($tiene[$key]);
             }
         }
         foreach ($guarda as $key => $item) {
             if (!$item->save($errors)) {
                 $fail = true;
             }
         }
         /* Ahora, los que tiene y vienen. Si el contenido es diferente, hay que guardarlo*/
         foreach ($tiene as $key => $row) {
             // a ver la diferencia con el que viene
             if ($row != $viene[$key]) {
                 if (!$viene[$key]->save($errors)) {
                     $fail = true;
                 }
             }
         }
         if (!empty($quita) || !empty($guarda)) {
             $this->individual_rewards = Project\Reward::getAll($this->id, 'individual');
         }
         // colaboraciones
         $tiene = Project\Support::getAll($this->id);
         $viene = $this->supports;
         $quita = array_diff_key($tiene, $viene);
         // quitar los que tiene y no viene
         $guarda = array_diff_key($viene, $tiene);
         // añadir los que viene y no tiene
         foreach ($quita as $key => $item) {
             if (!$item->remove($errors)) {
                 $fail = true;
             } else {
                 unset($tiene[$key]);
             }
         }
         foreach ($guarda as $key => $item) {
             if (!$item->save($errors)) {
                 $fail = true;
             }
         }
         /* Ahora, los que tiene y vienen. Si el contenido es diferente, hay que guardarlo*/
         foreach ($tiene as $key => $row) {
             // a ver la diferencia con el que viene
             if ($row != $viene[$key]) {
                 if (!$viene[$key]->save($errors)) {
                     $fail = true;
                 }
             }
         }
         if (!empty($quita) || !empty($guarda)) {
             $this->supports = Project\Support::getAll($this->id);
         }
         //listo
         return !$fail;
     } catch (\PDOException $e) {
         $errors[] = Text::_('No se ha grabado correctamente. ') . $e->getMessage();
         //Text::get('save-project-fail');
         return false;
     }
 }