Поиск квестов по типам классов...
[cswowd.git] / module / search / search_quest.php
blob8a130dd522b004765a0d05c9a5b39b084161d931
1 <?php
2 include_once("include/functions.php");
3 include_once("quest_zone_sort.php");
4 include_once("include/report_generator.php");
6 // Определяем режим поиска
7 $allmode = @$_REQUEST['s']=='all';
9 // Создаём ссылку на страницу, игнорируем дефолтные значения
10 $FindRefrence = "?s=q";
12 $show_fields = array('QUEST_REPORT_LEVEL', 'QUEST_REPORT_NAME', 'QUEST_REPORT_GIVER', 'QUEST_REPORT_REWARD');
13 //==============================================================================
14 // Создаём SQL запрос исходя из заданых пользователем параметров
15 //==============================================================================
16 $filter = "";
17 // Фильтр имени
18 if ($name = mysql_real_escape_string(@$_REQUEST['name']))
20 $filter.= " AND `Title` like '%$name%'";
21 $FindRefrence.="&name=$name";
23 // Level filter
24 if ($level_min = intval(@$_REQUEST['level_min']))
26 $filter." AND `MinLevel` >= '$level_min'";
27 $FindRefrence.="&level_min=$level_min";
29 if ($level_max = intval(@$_REQUEST['level_max']))
31 $filter." AND `MinLevel` <= '$level_max'";
32 $FindRefrence.="&level_max=$level_max";
34 // Фильтр по зоне
35 if ($ZoneID = intval(@$_REQUEST['ZoneID']))
37 $filter.= " AND `ZoneOrSort` = '$ZoneID'";
38 $FindRefrence.="&ZoneID=$ZoneID";
40 // Фильтр по типу
41 if ($SortID = intval(@$_REQUEST['SortID']))
43 $filter.= " AND `ZoneOrSort` = '-$SortID'";
44 $FindRefrence.="&SortID=$SortID";
46 // Фильтр по профе
47 if ($SkillID = intval(@$_REQUEST['SkillID']))
49 $filter.= " AND `RequiredSkill` = '$SkillID'";
50 $FindRefrence.="&SkillID=$SkillID";
52 // Фильтр по класу
53 if ($RedClass = intval(@$_REQUEST['RedClass']))
55 switch ($RedClass):
56 case 1: $RedClass1 = 1; break;
57 case 2: $RedClass1 = 2; break;
58 case 3: $RedClass1 = 4; break;
59 case 4: $RedClass1 = 8; break;
60 case 5: $RedClass1 = 16; break;
61 case 6: $RedClass1 = 32; break;
62 case 7: $RedClass1 = 64; break;
63 case 8: $RedClass1 = 128; break;
64 case 9: $RedClass1 = 256; break;
65 case 11: $RedClass1 = 1024; break;
66 default: $RedClass1 = 0;
67 endswitch;
68 $filter.= " AND `RequiredClasses` & '$RedClass1'";
69 $FindRefrence.="&RedClass=$RedClass";
71 // Фильтр по повтору
72 if ($Sfr = intval(@$_REQUEST['Sfr']))
74 $filter.= " AND `SpecialFlags` & 1 AND (`SpecialFlags` & 4 = 0 AND `QuestFlags` & 36864 = 0)";
75 $FindRefrence.="&Sfr=$Sfr";
77 // Фильтр по ежеднев
78 if ($Sfd = intval(@$_REQUEST['Sfd']))
80 $filter.= " AND `QuestFlags` & 4096";
81 $FindRefrence.="&Sfd=$Sfd";
83 // Фильтр по еженед
84 if ($Sfw = intval(@$_REQUEST['Sfw']))
86 $filter.= " AND `QuestFlags` & 32768";
87 $FindRefrence.="&Sfw=$Sfw";
89 // Фильтр по ежемес
90 if ($Sfm = intval(@$_REQUEST['Sfm']))
92 $filter.= " AND `SpecialFlags` = '$Sfm'";
93 $FindRefrence.="&Sfm=$Sfm";
95 // Фильтр c
96 if ($side = @$_REQUEST['side'])
98 $races = 0;
99 if ($side=='alliance') $filter.= ' AND ((`RequiredRaces`&'.(1 + 4 + 8 + 64 + 1024).') OR `RequiredRaces`=0)';
100 else if ($side=='horde' ) $filter.= ' AND ((`RequiredRaces`&'.(2 + 16 + 32 + 128 + 512).') OR `RequiredRaces`=0)';
101 $FindRefrence.='&side='.$side;
103 // Убираем ненужный AND в начале строки
104 $filter = substr($filter, 5);
106 // Вывод диалога поиска
107 if ($allmode==0 and $ajaxmode==0)
109 if ($level_min == 0) $level_min = "";
110 if ($level_max == 0) $level_max = "";
111 echo '<form>';
112 echo '<input name="s" type="hidden" value="q">';
113 echo '<table class=find>';
114 echo '<tr><td class=top colspan=2>';
115 echo '<table class=findtop><tr><td class=topleft>&nbsp;</td><td class=top>'.$lang['find_quest'].'</td><td class=topright>&nbsp;</td></tr></table>';
116 echo '</td></tr>';
117 echo '<tr><td>'.$lang['quest_name'].':</td><td><input class=ls_search alt="q" name="name" value="'.$name.'" size="39">';
118 echo '<select name="side">';
119 echo '<option value="both">'.$lang['Both'].'</option>';
120 echo '<option value="alliance">'.$lang['Alliance'].'</option>';
121 echo '<option value="horde">'.$lang['Horde'].'</option>';
122 echo '</select>';
123 echo '</td></tr>';
124 echo '<tr><td>'.$lang['level'].':</td><td><input name="level_min" value="'.$level_min.'" size="21"> - <input name="level_max" value="'.$level_max.'" size="21"></td></tr>';
125 echo '<tr><td colspan=2>';zoneSortSelect();echo '</td></tr>';
126 echo '<tr><td class=bottom colspan=2><input type=submit value="'.$lang['search'].'"></td></tr>';
127 echo '</table>';
128 echo '</form>';
131 // Ищем если имеется хоть чтото в запросе
132 if ($filter!="")
134 $quest_search =& new QuestReportGenerator();
135 if (!$allmode)
136 $quest_search->disableMark();
137 //==============================================================================
138 // Локализация запроса
139 //==============================================================================
140 if ($config['locales_lang'] > 0 && $name)
142 if (preg_match($config['locales_charset'], $name))
143 $filter = str_replace('`Title`', '`Title_loc'.$config['locales_lang'].'`', $filter);
144 else
145 $quest_search->disableNameLocalisation();
147 $quest_search->Init($show_fields, $FindRefrence, 'searchQuest', $config['fade_limit'], 'name');
148 $quest_search->doRequirest($filter);
149 $number = $quest_search->getTotalDataCount();
150 if ($number <= 0)
151 echo $lang['not_found'];
152 else if ($number == 1 && $allmode == 0) // Перенаправляем
153 echo '<meta http-equiv="refresh" content=1;URL=?quest='.$quest_search->data_array[0]['entry'].'>';
154 else
155 $quest_search->createReport($lang['search_results'].' - '.$lang['found'].' '.$number);