public function update($id, $request)
 {
     $req = $request->getParameters();
     $data = $req;
     $data['current'] = 'channels';
     $name = @$req['name'];
     $descr = @$req['description'];
     $admins = @json_decode($req['_admins']);
     if (isset($req['editChannelSubmit']) && Session::isActive()) {
         $channel = UserChannel::exists($id) ? UserChannel::find($id) : UserChannel::find_by_name($id);
         if (!is_object($channel)) {
             return Utils::getNotFoundResponse();
         }
         if (!$channel->belongToUser(Session::get()->id)) {
             return Utils::getForbiddenResponse();
         }
         $data['mainChannel'] = $channel->isUsersMainChannel(Session::get()->id);
         $data['name'] = $channel->name;
         $data['description'] = $channel->description;
         $data['currentPageTitle'] = $channel->name . ' - Edition';
         $data['owner_id'] = $channel->owner_id;
         $admins_array_ids = explode(';', trim($channel->admins_ids, ';'));
         $data['admins_ids'] = $admins_array_ids;
         $data['admins'] = array();
         foreach ($admins_array_ids as $adm) {
             $data['admins'][] = User::find_by_id($adm)->getMainChannel();
         }
         if (isset($req['name'], $req['description'])) {
             if (strlen($name) >= 3 && strlen($name) <= 40) {
                 if (preg_match("#^[a-zA-Z0-9\\_\\-\\.]+\$#", $name)) {
                     if ($channel->isUsersMainChannel(Session::get()->id)) {
                         if ($channel->name != $req['name']) {
                             $data['name'] = $channel->name;
                             $response = new ViewResponse('channel/edit', $data);
                             $response->addMessage(ViewMessage::error('Vous ne pouvez pas changer le nom de votre chaîne principale !'));
                             return $response;
                         }
                     } else {
                         $adm = trim($channel->admins_ids, ';');
                         $adm = explode(';', $adm);
                         foreach ($admins as $admin) {
                             if ($admin > 0) {
                                 if (!in_array($admin, $adm)) {
                                     $adm[] = $admin;
                                     ChannelAction::create(array('id' => ChannelAction::generateId(6), 'channel_id' => $channel->id, 'recipients_ids' => ';' . $admin . ';', 'type' => 'admin', 'target' => $channel->id, 'timestamp' => Utils::tps()));
                                 }
                             } else {
                                 $value = -1 * $admin;
                                 if (in_array($value, $adm) && $channel->owner_id != $value) {
                                     $id = array_keys($adm, $value);
                                     unset($adm[$id[0]]);
                                     ChannelAction::create(array('id' => ChannelAction::generateId(6), 'channel_id' => $channel->id, 'recipients_ids' => ';' . $admin . ';', 'type' => 'unadmin', 'target' => $channel->id, 'timestamp' => Utils::tps()));
                                 }
                             }
                         }
                         $adm = ';' . implode(';', $adm) . ';';
                     }
                     UserChannel::edit($channel->id, $name, $descr, $adm, $req['_FILES_']['avatar'], $req['_FILES_']['background']);
                     //TODO: Support logo/background
                     $data['channels'] = Session::get()->getOwnedChannels();
                     $data['currentPageTitle'] = 'Mes chaines';
                     $response = new ViewResponse('account/channels', $data);
                     $response->addMessage(ViewMessage::success('Votre chaîne ' . $name . ' a bien été modifiée !'));
                     return $response;
                 } else {
                     $response = new ViewResponse('channel/edit', $data);
                     $response->addMessage(ViewMessage::error('Le nom de la chaîne doit contenir uniquement des lettres (majuscules et minuscules), des traits-d\'union, des _ et des points.'));
                     return $response;
                 }
             } else {
                 $response = new ViewResponse('channel/edit', $data);
                 $response->addMessage(ViewMessage::error('Le nom de la chaîne doit être compris entre 3 et 40 caractères.'));
                 return $response;
             }
         } else {
             $response = new ViewResponse('channel/edit', $data);
             $response->addMessage(ViewMessage::error('Tous les champs doivent être remplis.'));
             return $response;
         }
     } else {
         if (isset($req['subscribe'])) {
             if (Session::isActive()) {
                 $channel = UserChannel::exists($id) ? UserChannel::find($id) : UserChannel::find_by_name($id);
                 if (is_object($channel) && !$channel->belongToUser(Session::get()->id)) {
                     $channel->subscribe(Session::get()->id);
                     $response = new Response(200);
                     return $response;
                 }
             } else {
                 return new Response(500);
             }
         } else {
             if (isset($req['unsubscribe'])) {
                 if (Session::isActive()) {
                     $channel = UserChannel::exists($id) ? UserChannel::find($id) : UserChannel::find_by_name($id);
                     if (is_object($channel) && !$channel->belongToUser(Session::get()->id)) {
                         $channel->unsubscribe(Session::get()->id);
                         $response = new Response(200);
                         return $response;
                     }
                 } else {
                     return new Response(500);
                 }
             } else {
                 if (isset($req['admin_edit'])) {
                     if (Session::isActive()) {
                         $channel = UserChannel::exists($id) ? UserChannel::find($id) : UserChannel::find_by_name($id);
                         if (!$channel) {
                             return Utils::getNotFoundResponse();
                         }
                         if (!$channel->isUsersMainChannel(Session::get()->id) && $channel->owner_id != Session::get()->id) {
                             if (in_array($channel, Session::get()->getOwnedChannels())) {
                                 $current_admins = $channel->admins_ids;
                                 $current_admins = trim($current_admins, ";");
                                 $current_admins = explode(";", $current_admins);
                                 foreach ($current_admins as $k => $admin) {
                                     if ($admin == Session::get()->id) {
                                         unset($current_admins[$k]);
                                         $channel->admins_ids = ";" . implode($current_admins, ";") . ";";
                                         $channel->save();
                                         return new RedirectResponse(WEBROOT . "channel/{$id}");
                                     }
                                 }
                             }
                         }
                     }
                     return Utils::getForbiddenResponse();
                 }
             }
         }
     }
 }