public function executeConfirmation_group(sfWebRequest $request)
 {
     $user = $this->getUser()->getAttribute(sfConfig::get('app_session_current_user'), null);
     $email = $request->getParameter('email');
     $token = $request->getParameter('token');
     $grupo_id = $request->getParameter('group_id');
     if ($user != null) {
         $criterio_busqueda = new Criteria();
         $criterio_busqueda->add(SolicitudGrupoTrabajoScPeer::EMAIL, '%' . $email . '%', Criteria::LIKE);
         $criterio_busqueda->add(SolicitudGrupoTrabajoScPeer::TOKEN, $token);
         $criterio_busqueda->add(SolicitudGrupoTrabajoScPeer::GRUPO_ID, $grupo_id);
         $solicitud = SolicitudGrupoTrabajoScPeer::doSelectOne($criterio_busqueda);
         //si no encuentra la solicitud con el token correcto
         if (is_object($solicitud)) {
             //en esta parte verifico si el token ya vencio
             $respuesta = json_decode($solicitud->getFlag());
             if ($respuesta->{'estado'}) {
                 $this->redirect('@list_working_groups');
             } else {
                 return sfView::ERROR;
             }
         } else {
             return sfView::ERROR;
         }
     } else {
         $this->redirect('@homepage');
     }
 }
 public function executeAccept_group(sfWebRequest $request)
 {
     $invitacion_id = $request->getParameter('invitacion');
     $token_seguridad = $request->getParameter('token');
     $email_token = $request->getParameter('email');
     $user_token = $request->getParameter('account');
     /*vamos a aceptar permanecer a un grupo
        aca realizo validacion en 5 capas
           1 reviso que la session de usuario exista
           2 que la el valor obtenido en la consulta sea un object(que la consulta sql resulte con el registro solicitado)
           3 el token de la solicitud sea correcto
           4 el email sea correcto
           5 que el usuario id sea correcto (este es id del usuario que envio la solicitud en md5)
       */
     $user = $this->getUser()->getAttribute(sfConfig::get('app_session_current_user'), null);
     if ($user != null) {
         $solicitud = SolicitudGrupoTrabajoScPeer::retrieveByPK($invitacion_id);
         if (is_object($solicitud)) {
             if ($token_seguridad == $solicitud->getToken()) {
                 if ($email_token == md5($user->getEmail())) {
                     if ($user_token == md5($solicitud->getUserId())) {
                         $solicitud->setRespondido(1);
                         $solicitud->setFlag(json_encode(array("estado" => false, "respuesta" => true)));
                         $solicitud->setUpdateAt(time());
                         $solicitud->save();
                         //falta cambiar los indicadores que esten relacionados al grupo
                         /*vamos a obtener todos los arboles que esten relacionados con el grupo
                           depues vamos a obtener todos los indicadores donde el usuario se encuentre
                           asignado y vamos a aumetar el ID en cada registro que encontremos*/
                         //admemas vamos hacer lo mismo en las asignaciones para tener un mejor indexacion
                         //a la hora de hacer las consultas.
                         $criterio_tree = new Criteria();
                         $criterio_tree->add(TreeScPeer::GRUPO_TRABAJO_ID, $solicitud->getGrupoId());
                         $list_tree = TreeScPeer::doSelect($criterio_tree);
                         foreach ($list_tree as $row) {
                             $con = Propel::getConnection();
                             $criterio_busqueda = new Criteria();
                             $criterio_busqueda->add(IndicatorsScPeer::EMAIL_RESPONSABLE, '%' . $solicitud->getEmail() . '%', Criteria::LIKE);
                             $criterio_busqueda->add(IndicatorsScPeer::TREE_ID, $row->getId());
                             $criterio_update = new Criteria();
                             $criterio_update->add(IndicatorsScPeer::RESPONSABLE_ID, $user->getId());
                             BasePeer::doUpdate($criterio_busqueda, $criterio_update, $con);
                             $con = Propel::close();
                         }
                         $con = Propel::getConnection();
                         $criterio_asignaciones = new Criteria();
                         $criterio_asignaciones->add(AsignacionScPeer::GRUPO_ID, $solicitud->getGrupoId());
                         $criterio_asignaciones->add(AsignacionScPeer::EMAIL, '%' . $user->getEmail() . '%', Criteria::LIKE);
                         $criterio_update = new Criteria();
                         $criterio_update->add(AsignacionScPeer::USER_ID, $user->getId());
                         BasePeer::doUpdate($criterio_asignaciones, $criterio_update, $con);
                         $con = Propel::close();
                         $grupo_trabajo = new DetalleGrupoTrabajoSc();
                         $grupo_trabajo->setEmail($user->getEmail());
                         $grupo_trabajo->setUserId($user->getId());
                         $grupo_trabajo->setGrupoId($solicitud->getGrupoId());
                         $grupo_trabajo->save();
                         $this->redirect('@list_working_groups');
                     } else {
                         return sfView::ERROR;
                     }
                 } else {
                     return sfView::ERROR;
                 }
             } else {
                 return sfView::ERROR;
             }
         } else {
             return sfView::ERROR;
         }
     } else {
         return sfView::ERROR;
     }
 }
 /**
  * If this collection has already been initialized with
  * an identical criteria, it returns the collection.
  * Otherwise if this UserSc is new, it will return
  * an empty collection; or if this UserSc has previously
  * been saved, it will retrieve related SolicitudGrupoTrabajoScs from storage.
  *
  * This method is protected by default in order to keep the public
  * api reasonable.  You can provide public methods for those you
  * actually need in UserSc.
  */
 public function getSolicitudGrupoTrabajoScsJoinGrupoTrabajoSc($criteria = null, $con = null, $join_behavior = Criteria::LEFT_JOIN)
 {
     if ($criteria === null) {
         $criteria = new Criteria(UserScPeer::DATABASE_NAME);
     } elseif ($criteria instanceof Criteria) {
         $criteria = clone $criteria;
     }
     if ($this->collSolicitudGrupoTrabajoScs === null) {
         if ($this->isNew()) {
             $this->collSolicitudGrupoTrabajoScs = array();
         } else {
             $criteria->add(SolicitudGrupoTrabajoScPeer::USER_ID, $this->id);
             $this->collSolicitudGrupoTrabajoScs = SolicitudGrupoTrabajoScPeer::doSelectJoinGrupoTrabajoSc($criteria, $con, $join_behavior);
         }
     } else {
         // the following code is to determine if a new query is
         // called for.  If the criteria is the same as the last
         // one, just return the collection.
         $criteria->add(SolicitudGrupoTrabajoScPeer::USER_ID, $this->id);
         if (!isset($this->lastSolicitudGrupoTrabajoScCriteria) || !$this->lastSolicitudGrupoTrabajoScCriteria->equals($criteria)) {
             $this->collSolicitudGrupoTrabajoScs = SolicitudGrupoTrabajoScPeer::doSelectJoinGrupoTrabajoSc($criteria, $con, $join_behavior);
         }
     }
     $this->lastSolicitudGrupoTrabajoScCriteria = $criteria;
     return $this->collSolicitudGrupoTrabajoScs;
 }
 /**
  * Populates the object using an array.
  *
  * This is particularly useful when populating an object from one of the
  * request arrays (e.g. $_POST).  This method goes through the column
  * names, checking to see whether a matching key exists in populated
  * array. If so the setByName() method is called for that column.
  *
  * You can specify the key type of the array by additionally passing one
  * of the class type constants BasePeer::TYPE_PHPNAME, BasePeer::TYPE_STUDLYPHPNAME,
  * BasePeer::TYPE_COLNAME, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_NUM.
  * The default key type is the column's phpname (e.g. 'AuthorId')
  *
  * @param      array  $arr     An array to populate the object from.
  * @param      string $keyType The type of keys the array uses.
  * @return     void
  */
 public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
 {
     $keys = SolicitudGrupoTrabajoScPeer::getFieldNames($keyType);
     if (array_key_exists($keys[0], $arr)) {
         $this->setId($arr[$keys[0]]);
     }
     if (array_key_exists($keys[1], $arr)) {
         $this->setGrupoId($arr[$keys[1]]);
     }
     if (array_key_exists($keys[2], $arr)) {
         $this->setEmail($arr[$keys[2]]);
     }
     if (array_key_exists($keys[3], $arr)) {
         $this->setCreateAt($arr[$keys[3]]);
     }
     if (array_key_exists($keys[4], $arr)) {
         $this->setUpdateAt($arr[$keys[4]]);
     }
     if (array_key_exists($keys[5], $arr)) {
         $this->setUserId($arr[$keys[5]]);
     }
     if (array_key_exists($keys[6], $arr)) {
         $this->setToken($arr[$keys[6]]);
     }
     if (array_key_exists($keys[7], $arr)) {
         $this->setFlag($arr[$keys[7]]);
     }
     if (array_key_exists($keys[8], $arr)) {
         $this->setRespondido($arr[$keys[8]]);
     }
 }
 private function evaluar_solicitud($email, $grupo, $userBean)
 {
     //solo puede enviar otra solicitud a la misma persona si
     //-es otra solicitud de otro grupo
     //-si el flag es 2 == Solicitud vencida
     $criterio_solicitud = new Criteria();
     $criterio_solicitud->add(SolicitudGrupoTrabajoScPeer::GRUPO_ID, $grupo);
     $criterio_solicitud->add(SolicitudGrupoTrabajoScPeer::EMAIL, '%' . $email . '%', Criteria::LIKE);
     //FLAG,'1' == activa
     $criterio_solicitud->add(SolicitudGrupoTrabajoScPeer::FLAG, '%estado":true%', Criteria::LIKE);
     $cantidad_registros = SolicitudGrupoTrabajoScPeer::doCount($criterio_solicitud);
     try {
         $con = Propel::getConnection();
         $con->beginTransaction();
         if ($cantidad_registros > 0) {
             //no le envio solicitud
             $obj = array("success" => true, "message" => "no le envio solicitud");
             $con = Propel::close();
             return $obj;
         } else {
             $solicitudBean = new SolicitudGrupoTrabajoSc();
             $solicitudBean->setGrupoId($grupo);
             $solicitudBean->setEmail($email);
             $solicitudBean->setCreateAt(time());
             $solicitudBean->setUpdateAt(time());
             $solicitudBean->setUserId($userBean->getId());
             //formar el token
             $token = md5($grupo . $email . rand($userBean->getId(), 1000));
             $solicitudBean->setToken($token);
             $solicitudBean->setFlag(json_encode(array("estado" => true, "respuesta" => false)));
             $solicitudBean->setRespondido(0);
             $solicitudBean->save();
             try {
                 $message = $this->getMailer()->compose();
                 $message->setSubject('Te invintaron a unirte a practil-scoredcard');
                 $message->setTo($email);
                 $message->setFrom(array('*****@*****.**' => 'Practil'));
                 $html = $this->getPartial('send_email/send_invitation_group', array('uri' => sfConfig::get('app_url_scorecard') . 'confirmation/confirmation_group?token=' . $token . '&email=' . $email . '&group_id=' . $grupo));
                 $message->setBody($html, 'text/html');
                 $this->getMailer()->send($message);
                 $con->commit();
                 $con = Propel::close();
                 $obj = array("success" => true, "message" => "le envie solicitud");
                 return $obj;
             } catch (Exception $e) {
                 $con->rollBack();
                 $con = Propel::close();
                 $obj = array("success" => false, "message" => $e->getMessage());
                 return $obj;
             }
         }
     } catch (Exception $e) {
         $con->rollBack();
         $con = Propel::close();
         $obj = array("success" => false, "message" => "se general");
         return $obj;
     }
 }
 /**
  * Retrieve multiple objects by pkey.
  *
  * @param      array $pks List of primary keys
  * @param      PropelPDO $con the connection to use
  * @throws     PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function retrieveByPKs($pks, PropelPDO $con = null)
 {
     if ($con === null) {
         $con = Propel::getConnection(SolicitudGrupoTrabajoScPeer::DATABASE_NAME, Propel::CONNECTION_READ);
     }
     $objs = null;
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria(SolicitudGrupoTrabajoScPeer::DATABASE_NAME);
         $criteria->add(SolicitudGrupoTrabajoScPeer::ID, $pks, Criteria::IN);
         $objs = SolicitudGrupoTrabajoScPeer::doSelect($criteria, $con);
     }
     return $objs;
 }