Example #1
0
 public function validate_tag_new($m, $arg)
 {
     if (false !== Slay_Tag::getByName($arg)) {
         return $m->lang('err_tag_exists');
     }
     return false;
 }
Example #2
0
 public function validate_tag($m, $arg)
 {
     if (Slay_Tag::getByName($arg) !== false) {
         return $m->lang('err_dup_tag');
     }
     return GWF_Validator::validateString($m, 'tag', $arg, 1, 63, true);
 }
Example #3
0
 private function onTag(Slay_Song $song)
 {
     $form = $this->formTag($song);
     if (false !== ($error = $form->validateCSRF_WeakS())) {
         return $error;
     }
     $tags = array();
     $errors = array();
     foreach ($_POST as $k => $v) {
         if (Common::startsWith($k, 'tag_')) {
             $k = substr($k, 4);
             if (Slay_Tag::getByName($k) === false) {
                 $errors[] = $this->module->lang('err_tag_uk');
             } else {
                 $tags[] = $k;
             }
         }
     }
     if (count($errors) > 0) {
         return GWF_HTML::error('Slaytags', $errors);
     }
     $user = GWF_Session::getUser();
     if (false === Slay_TagVote::clearVotes($song, $user)) {
         return GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__));
     }
     if (false === Slay_TagVote::addVotes($song, $user, $tags)) {
         return GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__));
     }
     if (false === $song->computeTags()) {
         return GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__));
     }
     return $this->module->message('msg_tagged');
 }
Example #4
0
 public static function validateTag(Module_Slaytags $module, $tagid, $allowEmpty = true, $blank = true, $name = 'searchtag')
 {
     if ($allowEmpty && $tagid == 0) {
         return false;
     }
     if (false === Slay_Tag::getByID($tagid)) {
         if ($blank) {
             unset($_POST[$name]);
         }
         return $module->lang('err_searchtag');
     }
     return false;
 }
Example #5
0
 private static function defaultTags(Module_Slaytags $module, $dropTables)
 {
     $tags = array('Rock', 'Pop', 'Classic', 'Siddy', 'Metal', 'Punk', 'Dance', 'Raggae', 'HipHop', 'Rap', 'Trance', 'Techno', 'Instrumental', 'Funk', 'Caribian', 'Acapella', 'Country', 'Orchestral', 'DrumAndBass', 'BreakBeat', 'Goa', 'Gabba', 'Ambient', 'Piano', 'Intro', 'Lyrics', 'Progressive', 'Melodic', 'Piano', 'Guitar', 'Bassy', 'Happy', 'Melancholic', 'Minimal', 'Relax', 'Funky', 'Oriental', 'Electro', 'House', 'Game', 'Tribal', 'Slow', 'Fast', 'Medieval', 'Theme', '80s', 'Spheric', 'Blues', 'Jazz', 'Acid');
     $table = GDO::table('Slay_Tag');
     foreach ($tags as $tag) {
         if (false === Slay_Tag::getByName($tag)) {
             if (false === $table->insertAssoc(array('st_id' => 0, 'st_uid' => 0, 'st_name' => $tag), true)) {
                 return GWF_HTML::err('ERR_DATABASE', array(__FILE__, __LINE__));
             }
         }
     }
     return '';
 }
Example #6
0
 public function validate_tag_new($m, $arg)
 {
     if (false === ($this->tag2 = Slay_Tag::getByID($arg))) {
         return $m->lang('err_unknown_target_tag');
     }
     if (!$this->tag) {
         return false;
     }
     if ($this->tag->getID() === $this->tag2->getID()) {
         return $m->lang('err_merge_same_tag');
     }
     return false;
 }
Example #7
0
 public static function addVotes(Slay_Song $song, GWF_User $user, array $tags)
 {
     $uid = $user->getID();
     $sid = $song->getID();
     $date = GWF_Time::getDate(GWF_Date::LEN_SECOND);
     $table = self::table(__CLASS__);
     foreach ($tags as $tag) {
         if (false === ($tid = Slay_Tag::getIDByName($tag))) {
             return false;
         }
         if (false === $table->insertAssoc(array('stv_uid' => $uid, 'stv_sid' => $sid, 'stv_tid' => $tid, 'stv_date' => $date), false)) {
             return false;
         }
     }
     return true;
 }
Example #8
0
 public static function computeVotes(Slay_Song $song, $taggers = 0)
 {
     $sid = $song->getID();
     $cache = array();
     $table = self::table(__CLASS__);
     foreach (Slay_Tag::getAllTags() as $tag_obj) {
         $tid = $tag_obj->getID();
         if (false === ($count = Slay_TagVote::countVotes($sid, $tid))) {
             return false;
         }
         $avg = $taggers > 0 ? (int) ($count / $taggers * self::SCALE) : 0;
         if ($count > 0) {
             $cache[$tag_obj->getVar('st_name')] = array($count, $tid);
         }
         if (false === $table->insertAssoc(array('sst_sid' => $sid, 'sst_tid' => $tid, 'sst_count' => $count, 'sst_average' => $avg), true)) {
             return false;
         }
     }
     # Cleanup empties
     if (false === $table->deleteWhere("sst_count=0")) {
         return false;
     }
     # Build cache
     $cc = NULL;
     if (count($cache) > 0) {
         arsort($cache);
         foreach ($cache as $tname => $data) {
             list($count, $tid) = $data;
             $href = sprintf('/index.php?mo=Slaytags&me=Search&searchtag=%s&searchterm=&search=Search&by=ss_id&dir=ASC&page=1', $tid);
             $cc .= sprintf(', <a href="%s">%s(%.02f%%)</a>', $href, $tname, $count / $taggers * 100);
         }
         $cc = substr($cc, 2);
     }
     if (false === $song->saveVar('ss_tag_cache', $cc)) {
         return false;
     }
     return true;
 }
Example #9
0
 public function getTags()
 {
     return Slay_Tag::getTags($this);
 }
Example #10
0
 private function onSearch()
 {
     $form = $this->formSearch();
     if (false !== ($error = $form->validate($this->module))) {
         return $error . $this->templateSearch();
     }
     $ipp = self::IPP;
     $term = $form->getVar('searchterm');
     $tagname = NULL;
     $table = GDO::table('Slay_Song');
     $whitelist = array('(ss_lyrics>0)', '(ss_options&1)', '(ss_sid_path!=NULL)');
     $joins = array('lyrics');
     if (false === ($where = GWF_QuickSearch::getQuickSearchConditions($table, array('ss_artist', 'ss_title', 'ss_composer'), $term))) {
         return GWF_HTML::err('ERR_SEARCH_TERM') . $this->templateSearch();
     }
     $term2 = GDO::escape($term);
     //		$term2 = str_replace(array('%', '_'), array('\\%', '\\_'), $term);
     $term3 = '1';
     if ('0' !== ($tag = $form->getVar('searchtag'))) {
         $tagname = Slay_Tag::getNameByID($tag);
         $term3 = 'sst_count>0';
         $joins[] = 'searchtag';
     }
     $where = "(({$where}) OR (ssl_lyrics LIKE '%{$term2}%')) AND ({$term3})";
     $nItems = $table->countRows($where, $joins);
     $nPages = GWF_PageMenu::getPagecount($ipp, $nItems);
     $page = Common::clamp(Common::getGetInt('page'), 1, $nPages);
     $from = GWF_PageMenu::getFrom($page, $ipp);
     $by = Common::getGetString('by', self::BY);
     $dir = Common::getGetString('dir', self::DIR);
     $orderby = $table->getMultiOrderby($by, $dir, false, $whitelist);
     $matches = $table->selectAll('*', $where, $orderby, $joins, $ipp, $from, GDO::ARRAY_O);
     $headers = array(array(), array($this->module->lang('L'), '(ss_lyrics>0)'), array($this->module->lang('T'), 'ss_taggers'), array($this->module->lang('D'), '(ss_options&1)'), array($this->module->lang('th_artist'), 'ss_artist'), array($this->module->lang('th_title'), 'ss_title'), array($this->module->lang('th_duration'), 'ss_duration'), array($this->l('th_bpm'), 'ss_bpm'), array($this->l('th_key'), 'ss_key'));
     if ($tag > 0) {
         $headers[] = array($this->module->lang(Slay_Tag::getNameByID($tag)), 'sst_count');
     }
     $headers[] = array($this->module->lang('th_tags'));
     $tVars = array('form' => $form->templateX($this->module->lang('ft_search'), GWF_WEB_ROOT . 'index.php'), 'pagemenu' => GWF_PageMenu::display($page, $nPages, GWF_WEB_ROOT . sprintf('index.php?mo=Slaytags&me=Search&searchterm=%s&searchtag=%s&by=%s&dir=%s&page=%%PAGE%%', urlencode($term), $tag, urlencode($by), urlencode($dir))), 'matches' => $matches, 'sort_url' => GWF_WEB_ROOT . sprintf('index.php?mo=Slaytags&me=Search&searchterm=%s&searchtag=%s&by=%%BY%%&dir=%%DIR%%&page=1', urlencode($term), $tag), 'is_admin' => GWF_User::isStaffS(), 'headers' => $headers, 'singletag' => $tagname, 'no_match' => count($matches) === 0);
     return $this->module->template('search.tpl', $tVars);
 }