* Alpha * License: GPLv2 * Description: Simple artists extension * Documentation: * */ class AuthorSetEvent extends Event { var $image, $user, $author; public function AuthorSetEvent(Image $image, User $user, /*string*/ $author) { $this->image = $image; $this->user = $user; $this->author = $author; } } class Artists extends Extension { public function onImageInfoSet(ImageInfoSetEvent $event) { global $user; if (isset($_POST["tag_edit__author"])) { send_event(new AuthorSetEvent($event->image, $user, $_POST["tag_edit__author"])); } } public function onAuthorSet(AuthorSetEvent $event) { $this->update_author($event); } public function onInitExt(InitExtEvent $event) { $this->try_install(); } public function onImageInfoBoxBuilding(ImageInfoBoxBuildingEvent $event) { $this->add_author_field_to_image($event); } public function onPageRequest(PageRequestEvent $event) { $this->handle_commands($event); } public function onSearchTermParse(SearchTermParseEvent $event) { $matches = array(); if(preg_match("/^author=(.*)$/", $event->term, $matches)) { $char = $matches[1]; $event->add_querylet(new Querylet("Author = :author_char", array("author_char"=>$char))); } } public function try_install() { global $config, $database; if ($config->get_int("ext_artists_version") < 1) { $database->create_table("artists", " id SCORE_AIPK, user_id INTEGER NOT NULL, name VARCHAR(255) NOT NULL, created DATETIME NOT NULL, updated DATETIME NOT NULL, notes TEXT, INDEX(id), FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE "); $database->create_table("artist_members", " id SCORE_AIPK, artist_id INTEGER NOT NULL, user_id INTEGER NOT NULL, name VARCHAR(255) NOT NULL, created DATETIME NOT NULL, updated DATETIME NOT NULL, INDEX (id), FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE "); $database->create_table("artist_alias", " id SCORE_AIPK, artist_id INTEGER NOT NULL, user_id INTEGER NOT NULL, created DATETIME, updated DATETIME, alias VARCHAR(255), INDEX (id), FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE "); $database->create_table("artist_urls", " id SCORE_AIPK, artist_id INTEGER NOT NULL, user_id INTEGER NOT NULL, created DATETIME NOT NULL, updated DATETIME NOT NULL, url VARCHAR(1000) NOT NULL, INDEX (id), FOREIGN KEY (user_id) REFERENCES users(id) ON UPDATE CASCADE ON DELETE CASCADE, FOREIGN KEY (artist_id) REFERENCES artists (id) ON UPDATE CASCADE ON DELETE CASCADE "); $database->execute("ALTER TABLE images ADD COLUMN author VARCHAR(255) NULL", array()); $config->set_int("artistsPerPage", 20); $config->set_int("ext_artists_version", 1); log_info("artists", "extension installed"); } } public function update_author($event) { global $database; $author = strtolower($event->author); if (strlen($author) == 0 || strpos($author, " ")) return; $paddedAuthor = str_replace(" ", "_", $author); $artistID = NULL; if ($this->artist_exists($author)) $artistID = $this->get_artist_id($author); if (is_null($artistID) && $this->alias_exists_by_name($paddedAuthor)) $artistID = $this->get_artistID_by_aliasName($paddedAuthor); if (is_null($artistID) && $this->member_exists_by_name($paddedAuthor)) $artistID = $this->get_artistID_by_memberName($paddedAuthor); if (is_null($artistID) && $this->url_exists_by_url($author)) $artistID = $this->get_artistID_by_url($author); if (!is_null($artistID)) $artistName = $this->get_artistName_by_artistID($artistID); else { $this->save_new_artist($author, ""); $artistName = $author; } $database->execute("UPDATE images SET author = ? WHERE id = ?" , array( $artistName , $event->image->id )); } public function handle_commands($event) { global $config, $page, $user; if($event->page_matches("artist")) { switch($event->get_arg(0)) { //*************ARTIST SECTION************** case "list": { $this->get_listing($page, $event); $this->theme->sidebar_options("neutral"); break; } case "new": { if(!$user->is_anonymous()){ $this->theme->new_artist_composer(); }else{ $this->theme->display_error(401, "Error", "You must be registered and logged in to create a new artist."); } break; } case "new_artist": { $page->set_mode("redirect"); $page->set_redirect(make_link("artist/new")); break; } case "create": { if(!$user->is_anonymous()) { $newArtistID = $this->add_artist(); if ($newArtistID == -1) { $this->theme->display_error(400, "Error", "Error when entering artist data."); } else { $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$newArtistID)); } } else { $this->theme->display_error(401, "Error", "You must be registered and logged in to create a new artist."); } break; } case "view": { $artistID = $event->get_arg(1); $artist = $this->get_artist($artistID); $aliases = $this->get_alias($artist['id']); $members = $this->get_members($artist['id']); $urls = $this->get_urls($artist['id']); $userIsLogged = !$user->is_anonymous(); $userIsAdmin = $user->is_admin(); $images = Image::find_images(0, 4, Tag::explode($artist['name'])); $this->theme->show_artist($artist, $aliases, $members, $urls, $images, $userIsLogged, $userIsAdmin); if ($userIsLogged) { //$this->theme->show_new_alias_composer($artistID); //$this->theme->show_new_member_composer($artistID); //$this->theme->show_new_url_composer($artistID); } $this->theme->sidebar_options("editor", $artistID, $userIsAdmin); break; } case "edit": { $artistID = $event->get_arg(1); $artist = $this->get_artist($artistID); $aliases = $this->get_alias($artistID); $members = $this->get_members($artistID); $urls = $this->get_urls($artistID); if(!$user->is_anonymous()){ $this->theme->show_artist_editor($artist, $aliases, $members, $urls); $userIsAdmin = $user->is_admin(); $this->theme->sidebar_options("editor", $artistID, $userIsAdmin); }else{ $this->theme->display_error(401, "Error", "You must be registered and logged in to edit an artist."); } break; } case "edit_artist": { $artistID = $_POST['artist_id']; $page->set_mode("redirect"); $page->set_redirect(make_link("artist/edit/".$artistID)); break; } case "edited": { $artistID = int_escape($_POST['id']); $this->update_artist(); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } case "nuke_artist": { $artistID = $_POST['artist_id']; $page->set_mode("redirect"); $page->set_redirect(make_link("artist/nuke/".$artistID)); break; } case "nuke": { $artistID = $event->get_arg(1); $this->delete_artist($artistID); // this will delete the artist, it's alias, it's urls and it's members $page->set_mode("redirect"); $page->set_redirect(make_link("artist/list")); break; } case "add_alias": { $artistID = $_POST['artist_id']; $this->theme->show_new_alias_composer($artistID); break; } case "add_member": { $artistID = $_POST['artist_id']; $this->theme->show_new_member_composer($artistID); break; } case "add_url": { $artistID = $_POST['artist_id']; $this->theme->show_new_url_composer($artistID); break; } //***********ALIAS SECTION *********************** case "alias": { switch ($event->get_arg(1)) { case "add": { $artistID = $_POST['artistID']; $this->add_alias(); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } case "delete": { $aliasID = $event->get_arg(2); $artistID = $this->get_artistID_by_aliasID($aliasID); $this->delete_alias($aliasID); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } case "edit": { $aliasID = int_escape($event->get_arg(2)); $alias = $this->get_alias_by_id($aliasID); $this->theme->show_alias_editor($alias); break; } case "edited": { $this->update_alias(); $aliasID = int_escape($_POST['aliasID']); $artistID = $this->get_artistID_by_aliasID($aliasID); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } } break; // case: alias } //**************** URLS SECTION ********************** case "url": { switch ($event->get_arg(1)) { case "add": { $artistID = $_POST['artistID']; $this->add_urls(); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } case "delete": { $urlID = $event->get_arg(2); $artistID = $this->get_artistID_by_urlID($urlID); $this->delete_url($urlID); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } case "edit": { $urlID = int_escape($event->get_arg(2)); $url = $this->get_url_by_id($urlID); $this->theme->show_url_editor($url); break; } case "edited": { $this->update_url(); $urlID = int_escape($_POST['urlID']); $artistID = $this->get_artistID_by_urlID($urlID); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } } break; // case: urls } //******************* MEMBERS SECTION ********************* case "member": { switch ($event->get_arg(1)) { case "add": { $artistID = $_POST['artistID']; $this->add_members(); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } case "delete": { $memberID = int_escape($event->get_arg(2)); $artistID = $this->get_artistID_by_memberID($memberID); $this->delete_member($memberID); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } case "edit": { $memberID = int_escape($event->get_arg(2)); $member = $this->get_member_by_id($memberID); $this->theme->show_member_editor($member); break; } case "edited": { $this->update_member(); $memberID = int_escape($_POST['memberID']); $artistID = $this->get_artistID_by_memberID($memberID); $page->set_mode("redirect"); $page->set_redirect(make_link("artist/view/".$artistID)); break; } } break; //case: members } } } } public function add_author_field_to_image($event) { global $user; $artistName = $this->get_artistName_by_imageID($event->image->id); if(!$user->is_anonymous()) { $event->add_part($this->theme->get_author_editor_html($artistName), 42); } } private function get_artistName_by_imageID($imageID) { if(!is_numeric($imageID)) return null; global $database; $result = $database->get_row("SELECT author FROM images WHERE id = ?", array($imageID)); return stripslashes($result['author']); } private function url_exists_by_url($url) { global $database; $result = $database->get_one("SELECT COUNT(1) FROM artist_urls WHERE url = ?", array($url)); return ($result != 0); } private function member_exists_by_name($member) { global $database; $result = $database->get_one("SELECT COUNT(1) FROM artist_members WHERE name = ?", array($member)); return ($result != 0); } private function alias_exists_by_name($alias) { global $database; $result = $database->get_one("SELECT COUNT(1) FROM artist_alias WHERE alias = ?", array($alias)); return ($result != 0); } private function alias_exists($artistID, $alias){ if (!is_numeric($artistID)) return; global $database; $result = $database->get_one("SELECT COUNT(1) FROM artist_alias WHERE artist_id = ? AND alias = ?", array( $artistID , $alias )); return ($result != 0); } private function get_artistID_by_url($url) { global $database; $result = $database->get_row("SELECT artist_id FROM artist_urls WHERE url = ?", array($url)); return $result['artist_id']; } private function get_artistID_by_memberName($member) { global $database; $result = $database->get_row("SELECT artist_id FROM artist_members WHERE name = ?", array($member)); return $result['artist_id']; } private function get_artistName_by_artistID($artistID) { if (!is_numeric($artistID)) return; global $database; $result = $database->get_row("SELECT name FROM artists WHERE id = ?", array($artistID)); return stripslashes($result['name']); } private function get_artistID_by_aliasID($aliasID) { if (!is_numeric($aliasID)) return; global $database; $result = $database->get_row("SELECT artist_id FROM artist_alias WHERE id = ?", array($aliasID)); return $result['artist_id']; } private function get_artistID_by_memberID($memberID) { if (!is_numeric($memberID)) return; global $database; $result = $database->get_row("SELECT artist_id FROM artist_members WHERE id = ?", array($memberID)); return $result['artist_id']; } private function get_artistID_by_urlID($urlID) { if (!is_numeric($urlID)) return; global $database; $result = $database->get_row("SELECT artist_id FROM artist_urls WHERE id = ?", array($urlID)); return $result['artist_id']; } private function delete_alias($aliasID) { if (!is_numeric($aliasID)) return; global $database; $database->execute("DELETE FROM artist_alias WHERE id = ?", array($aliasID)); } private function delete_url($urlID) { if (!is_numeric($urlID)) return; global $database; $database->execute("DELETE FROM artist_urls WHERE id = ?", array($urlID)); } private function delete_member($memberID) { if (!is_numeric($memberID)) return; global $database; $database->execute("DELETE FROM artist_members WHERE id = ?", array($memberID)); } private function get_alias_by_id($aliasID) { if (!is_numeric($aliasID)) return; global $database; $result = $database->get_row("SELECT * FROM artist_alias WHERE id = ?", array($aliasID)); $result["alias"] = stripslashes($result["alias"]); return $result; } private function get_url_by_id($urlID) { if (!is_numeric($urlID)) return; global $database; $result = $database->get_row("SELECT * FROM artist_urls WHERE id = ?", array($urlID)); $result["url"] = stripslashes($result["url"]); return $result; } private function get_member_by_id($memberID) { if (!is_numeric($memberID)) return; global $database; $result = $database->get_row("SELECT * FROM artist_members WHERE id = ?", array($memberID)); $result["name"] = stripslashes($result["name"]); return $result; } private function update_artist() { global $user; $artistID = $_POST['id']; $name = strtolower($_POST['name']); $notes = $_POST['notes']; $userID = $user->id; $aliasesAsString = trim($_POST["aliases"]); if (strlen($aliasesAsString) == 0) $aliasesAsString = NULL; $aliasesIDsAsString = trim($_POST["aliasesIDs"]); if (strlen($aliasesIDsAsString) == 0) $aliasesIDsAsString = NULL; $membersAsString = trim($_POST["members"]); if (strlen($membersAsString) == 0) $membersAsString = NULL; $membersIDsAsString = trim($_POST["membersIDs"]); if (strlen($membersIDsAsString) == 0) $membersIDsAsString = NULL; $urlsAsString = trim($_POST["urls"]); if (strlen($urlsAsString) == 0) $urlsAsString = NULL; $urlsIDsAsString = trim($_POST["urlsIDs"]); if (strlen($urlsIDsAsString) == 0) $urlsIDsAsString = NULL; if (is_null($artistID) || !is_numeric($artistID)) return; if (is_null($userID) || !is_numeric($userID)) return; if (is_null($name) || strlen($name) == 0 || strpos($name, " ")) return; //if (is_null($aliasesAsString) || is_null($aliasesIDsAsString)) // return; //if (is_null($membersAsString) || is_null($membersIDsAsString)) // return; //if (is_null($urlsAsString) || is_null($urlsIDsAsString)) // return; if (strlen($notes) == 0) $notes = NULL; global $database; $database->execute("UPDATE artists SET name = ?, notes = ?, updated = now(), user_id = ? WHERE id = ? " , array( $name , $notes , $userID , $artistID )); // ALIAS MATCHING SECTION $i = 0; $aliasesAsArray = is_null($aliasesAsString) ? array() : explode(" ", $aliasesAsString); $aliasesIDsAsArray = is_null($aliasesIDsAsString) ? array() : explode(" ", $aliasesIDsAsString); while ($i < count($aliasesAsArray)) { // if an alias was updated if ($i < count($aliasesIDsAsArray)) // save it $this->save_existing_alias($aliasesIDsAsArray[$i], $aliasesAsArray[$i], $userID); else // if we already updated all, save new ones $this->save_new_alias($artistID, $aliasesAsArray[$i], $userID); $i++; } // if we have more ids than alias, then some alias have been deleted -- delete them from db while ($i < count($aliasesIDsAsArray)) $this->delete_alias($aliasesIDsAsArray[$i++]); // MEMBERS MATCHING SECTION $i = 0; $membersAsArray = is_null($membersAsString) ? array() : explode(" ", $membersAsString); $membersIDsAsArray = is_null($membersIDsAsString) ? array() : explode(" ", $membersIDsAsString); while ($i < count($membersAsArray)) { // if a member was updated if ($i < count($membersIDsAsArray)) //save it $this->save_existing_member($membersIDsAsArray[$i], $membersAsArray[$i], $userID); else // if we already updated all, save new ones $this->save_new_member($artistID, $membersAsArray[$i], "", $userID); $i++; } // if we have more ids than members, then some members have been deleted -- delete them from db while ($i < count($membersIDsAsArray)) $this->delete_member($membersIDsAsArray[$i++]); // URLS MATCHING SECTION $i = 0; $urlsAsString = str_replace("\r\n", "\n", $urlsAsString); $urlsAsString = str_replace("\n\r", "\n", $urlsAsString); $urlsAsArray = is_null($urlsAsString) ? array() : explode("\n", $urlsAsString); $urlsIDsAsArray = is_null($urlsIDsAsString) ? array() : explode(" ", $urlsIDsAsString); while ($i < count($urlsAsArray)) { // if an URL was updated if ($i < count($urlsIDsAsArray)) { // save it $this->save_existing_url($urlsIDsAsArray[$i], $urlsAsArray[$i], $userID); } else { $this->save_new_url($artistID, $urlsAsArray[$i], $userID); } $i++; } // if we have more ids than urls, then some urls have been deleted -- delete them from db while ($i < count($urlsIDsAsArray)) $this->delete_url($urlsIDsAsArray[$i++]); } private function update_alias() { $aliasID = $_POST['aliasID']; $alias = strtolower($_POST['alias']); if (is_null($aliasID) || !is_numeric($aliasID)) return; if (is_null($alias) || strlen($alias) == 0) return; global $user; $this->save_existing_alias($aliasID, $alias, $user->id); } private function save_existing_alias($aliasID, $alias, $userID) { if (!is_numeric($userID)) return; if (!is_numeric($aliasID)) return; global $database; $database->execute("UPDATE artist_alias SET alias = ?, updated = now(), user_id = ? WHERE id = ? " , array( $alias , $userID , $aliasID )); } private function update_url() { $urlID = $_POST['urlID']; $url = $_POST['url']; if (is_null($urlID) || !is_numeric($urlID)) return; if (is_null($url) || strlen($url) == 0) return; global $user; $this->save_existing_url($urlID, $url, $user->id); } private function save_existing_url($urlID, $url, $userID) { if (!is_numeric($userID)) return; if (!is_numeric($urlID)) return; global $database; $database->execute("UPDATE artist_urls SET url = ?, updated = now(), user_id = ? WHERE id = ?" , array( $url , $userID , $urlID )); } private function update_member() { $memberID = $_POST['memberID']; $memberName = strtolower($_POST['name']); if (is_null($memberID) || !is_numeric($memberID)) return; if (is_null($memberName) || strlen($memberName) == 0) return; global $user; $this->save_existing_member($memberID, $memberName, $user->id); } private function save_existing_member($memberID, $memberName, $userID) { if (!is_numeric($memberID)) return; if (!is_numeric($userID)) return; global $database; $database->execute("UPDATE artist_members SET name = ?, updated = now(), user_id = ? WHERE id = ?" , array( $memberName , $userID , $memberID )); } /* * HERE WE ADD AN ARTIST */ private function add_artist(){ global $user; $name = html_escape(strtolower($_POST["name"])); if (is_null($name) || (strlen($name) == 0) || strpos($name, " ")) return -1; $notes = html_escape(ucfirst($_POST["notes"])); if (strlen($notes) == 0) $notes = NULL; $aliases = strtolower($_POST["aliases"]); $members = strtolower($_POST["members"]); $urls = $_POST["urls"]; $userID = $user->id; $artistID = ""; //// WE CHECK IF THE ARTIST ALREADY EXISTS ON DATABASE; IF NOT WE CREATE if(!$this->artist_exists($name)) { $artistID = $this->save_new_artist($name, $notes); log_info("artists", "Artist {$artistID} created by {$user->name}"); } else $artistID = $this->get_artist_id($name); if (strlen($aliases) > 0) { $aliasArray = explode(" ", $aliases); foreach($aliasArray as $alias) if (!$this->alias_exists($artistID, $alias)) $this->save_new_alias($artistID, $alias, $userID); } if (strlen($members) > 0) { $membersArray = explode(" ", $members); foreach ($membersArray as $member) if (!$this->member_exists($artistID, $member)) $this->save_new_member($artistID, $member, "", $userID); } if (strlen($urls)) { //delete double "separators" $urls = str_replace("\r\n", "\n", $urls); $urls = str_replace("\n\r", "\n", $urls); $urlsArray = explode("\n", $urls); foreach ($urlsArray as $url) if (!$this->url_exists($artistID, $url)) $this->save_new_url($artistID, $url, $userID); } return $artistID; } private function save_new_artist($name, $notes) { global $database, $user; $database->execute(" INSERT INTO artists (user_id, name, notes, created, updated) VALUES (?, ?, ?, now(), now())", array( $user->id , $name , $notes )); $result = $database->get_row("SELECT LAST_INSERT_ID() AS artistID", array()); return $result["artistID"]; } /* * HERE WE CHECK IF ARTIST EXIST */ private function artist_exists($name){ global $database; $result = $database->get_one("SELECT COUNT(1) FROM artists WHERE name = ?" , array( $name )); return ($result != 0); } /* * HERE WE GET THE INFO OF THE ARTIST */ private function get_artist($artistID){ if (!is_numeric($artistID)) return; global $database; $result = $database->get_row("SELECT * FROM artists WHERE id = ?", array( $artistID )); $result["name"] = stripslashes($result["name"]); $result["notes"] = stripslashes($result["notes"]); return $result; } private function get_members($artistID) { if (!is_numeric($artistID)) return; global $database; $result = $database->get_all("SELECT * FROM artist_members WHERE artist_id = ?" , array( $artistID )); $num = count($result); for ($i = 0 ; $i < $num ; $i++) { $result[$i]["name"] = stripslashes($result[$i]["name"]); } return $result; } private function get_urls($artistID) { if (!is_numeric($artistID)) return; global $database; $result = $database->get_all("SELECT id, url FROM artist_urls WHERE artist_id = ?" , array( $artistID )); $num = count($result); for ($i = 0 ; $i < $num ; $i++) { $result[$i]["url"] = stripslashes($result[$i]["url"]); } return $result; } /* * HERE WE GET THE ID OF THE ARTIST */ private function get_artist_id($name){ global $database; $artistID = $database->get_row("SELECT id FROM artists WHERE name = ?" , array( $name )); return $artistID['id']; } private function get_artistID_by_aliasName($alias) { global $database; $artistID = $database->get_row("SELECT artist_id FROM artist_alias WHERE alias = ?" , array( $alias )); return $artistID["artist_id"]; } /* * HERE WE DELETE THE ARTIST */ private function delete_artist($artistID) { if (!is_numeric($artistID)) return; global $database; $database->execute("DELETE FROM artists WHERE id = ? " , array( $artistID )); } /* * HERE WE GET THE LIST OF ALL ARTIST WITH PAGINATION */ private function get_listing(Page $page, $event) { $pageNumber = $event->get_arg(1); if(is_null($pageNumber) || !is_numeric($pageNumber)) $pageNumber = 0; else if ($pageNumber <= 0) $pageNumber = 0; else $pageNumber--; global $config, $database; $artistsPerPage = $config->get_int("artistsPerPage"); $listing = $database->get_all( " ( SELECT a.id, a.user_id, a.name, u.name AS user_name, COALESCE(t.count, 0) AS posts , 'artist' as type, a.id AS artist_id, a.name AS artist_name, a.updated FROM artists AS a INNER JOIN users AS u ON a.user_id = u.id LEFT OUTER JOIN tags AS t ON a.name = t.tag GROUP BY a.id, a.user_id, a.name, u.name ORDER BY a.updated DESC ) UNION ( SELECT aa.id, aa.user_id, aa.alias AS name, u.name AS user_name, COALESCE(t.count, 0) AS posts , 'alias' as type, a.id AS artist_id, a.name AS artist_name, aa.updated FROM artist_alias AS aa INNER JOIN users AS u ON aa.user_id = u.id INNER JOIN artists AS a ON aa.artist_id = a.id LEFT OUTER JOIN tags AS t ON aa.alias = t.tag GROUP BY aa.id, a.user_id, aa.alias, u.name, a.id, a.name ORDER BY aa.updated DESC ) UNION ( SELECT m.id, m.user_id, m.name AS name, u.name AS user_name, COALESCE(t.count, 0) AS posts , 'member' AS type, a.id AS artist_id, a.name AS artist_name, m.updated FROM artist_members AS m INNER JOIN users AS u ON m.user_id = u.id INNER JOIN artists AS a ON m.artist_id = a.id LEFT OUTER JOIN tags AS t ON m.name = t.tag GROUP BY m.id, m.user_id, m.name, u.name, a.id, a.name ORDER BY m.updated DESC ) ORDER BY updated DESC LIMIT ?, ? ", array( $pageNumber * $artistsPerPage , $artistsPerPage )); $number_of_listings = count($listing); for ($i = 0 ; $i < $number_of_listings ; $i++) { $listing[$i]["name"] = stripslashes($listing[$i]["name"]); $listing[$i]["user_name"] = stripslashes($listing[$i]["user_name"]); $listing[$i]["artist_name"] = stripslashes($listing[$i]["artist_name"]); } $count = $database->get_one( "SELECT COUNT(1) FROM artists AS a LEFT OUTER JOIN artist_members AS am ON a.id = am.artist_id LEFT OUTER JOIN artist_alias AS aa ON a.id = aa.artist_id "); $totalPages = ceil ($count / $artistsPerPage); $this->theme->list_artists($listing, $pageNumber + 1, $totalPages); } /* * HERE WE ADD AN ALIAS */ private function add_urls() { global $user; $artistID = $_POST["artistID"]; $urls = $_POST["urls"]; $userID = $user->id; if (is_null($artistID) || !is_numeric($artistID)) return; if (is_null($urls) || strlen($urls) == 0) return; $urlArray = explode("\n", $urls); foreach ($urlArray as $url) if (!$this->url_exists($artistID, $url)) $this->save_new_url($artistID, $url, $userID); } private function save_new_url($artistID, $url, $userID) { if (!is_numeric($artistID)) return; if (!is_numeric($userID)) return; global $database; $database->execute("INSERT INTO artist_urls (artist_id, created, updated, url, user_id) VALUES (?, now(), now(), ?, ?)" , array( $artistID , $url , $userID )); } private function add_alias() { global $user; $artistID = $_POST["artistID"]; $aliases = strtolower($_POST["aliases"]); $userID = $user->id; if (is_null($artistID) || !is_numeric($artistID)) return; if (is_null($aliases) || trim($aliases) == "") return; $aliasArray = explode(" ", $aliases); global $database; foreach ($aliasArray as $alias) if (!$this->alias_exists($artistID, $alias)) $this->save_new_alias($artistID, $alias, $userID); } private function save_new_alias($artistID, $alias, $userID) { if (!is_numeric($artistID)) return; if (!is_numeric($userID)) return; global $database; $database->execute("INSERT INTO artist_alias (artist_id, created, updated, alias, user_id) VALUES (?, now(), now(), ?, ?)" , array( $artistID , $alias , $userID )); } private function add_members() { global $user; $artistID = $_POST["artistID"]; $members = strtolower($_POST["members"]); $userID = $user->id; if (is_null($artistID) || !is_numeric($artistID)) return; if (is_null($members) || trim($members) == "") return; $memberArray = explode(" ", $members); foreach ($memberArray as $member) if (!$this->member_exists($artistID, $member)) $this->save_new_member($artistID, $member, $userID); } private function save_new_member($artistID, $member, $userID) { if (!is_numeric($artistID)) return; if (!is_numeric($userID)) return; global $database; $database->execute("INSERT INTO artist_members (artist_id, name, created, updated, user_id) VALUES (?, ?, now(), now(), ?)" , array( $artistID , $member , $userID )); } private function member_exists($artistID, $member) { if (!is_numeric($artistID)) return; global $database; $result = $database->get_one("SELECT COUNT(1) FROM artist_members WHERE artist_id = ? AND name = ?" , array( $artistID , $member )); return ($result != 0); } private function url_exists($artistID, $url) { if (!is_numeric($artistID)) return; global $database; $result = $database->get_one("SELECT COUNT(1) FROM artist_urls WHERE artist_id = ? AND url = ?" , array( $artistID , $url )); return ($result != 0); } /* * HERE WE GET THE INFO OF THE ALIAS */ private function get_alias($artistID){ if (!is_numeric($artistID)) return; global $database; $result = $database->get_all("SELECT id AS alias_id, alias AS alias_name ". "FROM artist_alias ". "WHERE artist_id = ? ". "ORDER BY alias ASC" , array($artistID)); for ($i = 0 ; $i < count($result) ; $i++) { $result[$i]["alias_name"] = stripslashes($result[$i]["alias_name"]); } return $result; } } ?>