/** Renvoie la liste des Marks d'un utilisateur. * Si l'utilisateur requeteur n'est pas l'utilisateur possesseur, * seule la liste de ses Marks publics de l'utilisateur possesseur est renvoyée. * * @param string $login_user * @param array $include_tags Ids de Tags, seuls les Marks correspondants aux Tags listés ici seront sélectionnés * @param array $exclude_tags Ids de Tags, les Marks correspondants à ces Tags ne seront pas sélectionnés * */ function getMarksListOfUser($login_user, $include_tags = null, $exclude_tags = null) { // permissions $cur_user =& $this->_slots['auth']->getConnectedUser(); if (Blogmarks::isError($cur_user)) { return $cur_user; } $include_priv = $cur_user->login === $login_user ? true : false; // On vérifie que l'utilisateur existe $user =& Element_Factory::makeElement('Bm_Users'); if (!$user->get('login', $login_user)) { return Blogmarks::raiseError("L'utilisateur [{$login_user}] n'existe pas", 404); } // Récupération de la liste des Marks $res = $user->getMarksList($include_tags, $exclude_tags, $include_priv); return $res; }
/** Renvoie la liste des Marks de l'utilisateur. * @param array $include_tags Ids de Tags, seuls les Marks correspondants aux Tags listés ici seront sélectionnés * @param array $exclude_tags Ids de Tags, les Marks correspondants à ces Tags ne seront pas sélectionnés * @param bool $private Si true, recherche aussi parmi les Tags privés * @return mixed DB_DataObject_Result (itérateur de Bm_Element_Marks) ou Blogmarks_Exception en cas d'erreur */ function getMarksList($include_tags = null, $exclude_tags = null, $private = false) { $now = date("Ymd His"); $mark =& Element_Factory::makeElement('Bm_Marks'); // ---- Sélection simple if (!$include_tags && !$exclude_tags) { $mark->bm_Users_id = $this->id; // Par défaut, on ne récupère que les Tags publics if (!$private) { $mark->whereAdd("issued != 0 "); $mark->whereAdd("issued < '{$now}'"); } return $mark->find() > 0 ? $mark : Blogmarks::raiseError("Aucun Mark disponible pour l'utilisateur [{$this->login}].", 404); } // ---- Sélection conditionnelle $assocs =& Element_Factory::makeElement('Bm_Marks_has_bm_Tags'); // INNER JOIN entre bm_Marks_has_Tags et Bm_Marks $assocs->joinAdd($mark); // Constitution de la liste des Marks à exclure if (is_array($exclude_tags) && count($exclude_tags)) { foreach ($exclude_tags as $tag_id) { $assocs->whereAdd("bm_Tags_id = '{$tag_id}'", 'OR'); } $assocs->find(); while ($assocs->fetch()) { $excluded_marks[] = $assocs->bm_Marks_id; // Dédoublonnage des résultats $excluded_marks = array_unique($excluded_marks); } } // Reset $assocs =& Element_Factory::makeElement('Bm_Marks_has_bm_Tags'); $marks =& Element_Factory::makeElement('Bm_Marks'); $marks->joinAdd($assocs); // -- Marks à inclure // Selon un Tag les décrivant if (is_array($include_tags) && count($include_tags)) { foreach ($include_tags as $tag_id) { $marks->whereAdd("bm_Tags_id = '{$tag_id}'", 'OR'); } } // On ne sélectionne pas les Marks dont le Tag est exclu if (is_array($excluded_marks) && count($excluded_marks)) { foreach ($excluded_marks as $mark_id) { $marks->whereAdd("bm_Marks_id != '{$mark_id}'", 'AND'); } } // Par défaut, on ne sélectionne que les Marks publics // Par défaut, on ne récupère que les Tags publics if (!$private) { $marks->whereAdd("issued != 0 ", 'AND'); $marks->whereAdd("issued < '{$now}'", 'AND'); } return $marks->find() > 0 ? $marks : Blogmarks::raiseError('Aucun Mark disponible avec ces critères.', 404); }
/** Supprime l'association entre le Tag et le Mark. * @param string $tag_id * @return mixed true ou Blogmarks_Exception en cas d'erreur */ function remTagAssoc($tag_id) { $assoc_def =& Element_Factory::makeElement('Bm_Marks_has_bm_Tags'); $assoc_def->bm_Marks_id = $this->id; $assoc_def->bm_Tags_id = $tag_id; if ($assoc_def->find(true)) { $assoc_def->delete(); return true; } else { return Blogmarks::raiseError("Le Tag [{$tag_id}] n'est pas associé au Mark [{$this->id}]", 404); } }
/** Renvoie l'utilisateur en cours. * Cette information peut etre stockée soit en session, soit dans les propriétés de l'objet. * Si les deux locations sont renseignées, on donne priorité aux informations de session. * * @return object Element_Bm_Users */ function getConnectedUser() { // Recherche de l'identifiant de l'utilisateur connecté $uid = isset($_SESSION['_BM']['user_id']) ? $_SESSION['_BM']['user_id'] : null; if (!$uid) { $uid = isset($this->_connectedUserId) ? $this->_connectedUserId : null; } // Si aucun utilisateur n'est connecté if (!$uid) { return Blogmarks::raiseError('Aucun utilisateur connecté', 404); } // Renvoi de l'objet correspondant à l'utilisateur $user =& Element_Factory::makeElement('Bm_Users'); if ($user->get($uid)) { return $user; } else { return Blogmarks::raiseError("Aucun utilisateur connecté.", 404); } }
/** Suppression d'un utilisateur * @param string $login Le login de l'utilisateur. * @return mixed true ou Blogmarks_Exception en cas d'erreur */ function deleteUser($login) { $user =& Element_Factory::makeElement('Bm_Users'); // On vérifie que l'utilisateur existe $user->login = $login; if (!$user->find()) { return Blogmarks::raiseError("L'utilisateur [{$user->login}] n'existe pas.", 404); } // Suppression $res =& $user->delete(); if (DB::isError($res)) { return Blogmarks::raiseError($res->getMessage(), $res->getCode()); } return true; }
/** Renvoie la valeur du Link lié passé en paramètre. * @param string field_name Un nom de champs lié (renvoyé par Bm_Marks::getLinksFields()) * @return mixed String ou Blogmarks_Exception en cas d'erreur */ function getLink($field) { // On vérifie que le champs passé en paramètre est bien un Link lié if (!count(in_array($field, $this->_links_fields))) { return Blogmarks::raiseError("Aucun Link lié nommé [{$field}].", 404); } $link =& Element_Factory::makeElement('Bm_Links'); // Récupération du lien if (!$link->get('id', $this->{$field})) { return Blogmarks::raiseError("Aucun Link [{$field}] associé au Mark [{$this->id}].", 404); } return $link; }