Требование: PHP => 5.3, часть 2
[cswow.git] / module / search / search_quest.php
blob8c0e2ae58a267b058ff14e0a6d8d9a9d6016a757
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_GIVER_END', '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=='allianceonly') $filter.= " AND `RequiredRaces` = 1101";
100 else if ($side=='alliance') $filter.= ' AND ((`RequiredRaces`&'.(1 + 4 + 8 + 64 + 1024).') OR `RequiredRaces`=0)';
101 else if ($side=='hordeonly') $filter.= " AND `RequiredRaces` = 690";
102 else if ($side=='horde') $filter.= ' AND ((`RequiredRaces`&'.(2 + 16 + 32 + 128 + 512).') OR `RequiredRaces`=0)';
103 $FindRefrence.='&side='.$side;
105 // Убираем ненужный AND в начале строки
106 $filter = substr($filter, 5);
108 // Вывод диалога поиска
109 if ($allmode==0 and $ajaxmode==0)
111 if ($level_min == 0) $level_min = "";
112 if ($level_max == 0) $level_max = "";
113 echo '<form>';
114 echo '<input name="s" type="hidden" value="q">';
115 echo '<table class=find>';
116 echo '<tr><td class=top colspan=2>';
117 echo '<table class=findtop><tr><td class=topleft>&nbsp;</td><td class=top>'.$lang['find_quest'].'</td><td class=topright>&nbsp;</td></tr></table>';
118 echo '</td></tr>';
119 echo '<tr><td>'.$lang['quest_name'].':</td><td><input class=ls_search alt="q" name="name" value="'.$name.'" size="39">';
120 echo '<select name="side">';
121 echo '<option value="both">'.$lang['Both'].'</option>';
122 echo '<option value="alliance">'.$lang['Alliance'].'</option>';
123 echo '<option value="horde">'.$lang['Horde'].'</option>';
124 echo '<option value="allianceonly">'.$lang['Allianceonly'].'</option>';
125 echo '<option value="hordeonly">'.$lang['Hordeonly'].'</option>';
126 echo '</select>';
127 echo '</td></tr>';
128 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>';
129 echo '<tr><td colspan=2>';zoneSortSelect();echo '</td></tr>';
130 echo '<tr><td class=bottom colspan=2><input type=submit value="'.$lang['search'].'"></td></tr>';
131 echo '</table>';
132 echo '</form>';
135 // Ищем если имеется хоть чтото в запросе
136 if ($filter!="")
138 $quest_search = new QuestReportGenerator();
139 if (!$allmode)
140 $quest_search->disableMark();
141 //==============================================================================
142 // Локализация запроса
143 //==============================================================================
144 if ($config['locales_lang'] > 0 && $name)
146 if (preg_match($config['locales_charset'], $name) || ctype_digit($name))
147 $filter = str_replace('`Title`', '`Title_loc'.$config['locales_lang'].'`', $filter);
148 else
149 $quest_search->disableNameLocalisation();
151 $quest_search->Init($show_fields, $FindRefrence, 'searchQuest', $config['fade_limit'], 'name');
152 $quest_search->doRequirest($filter);
153 $number = $quest_search->getTotalDataCount();
154 if ($number <= 0)
155 echo $lang['not_found'];
156 else if ($number == 1 && $allmode == 0) // Перенаправляем
157 echo '<meta http-equiv="refresh" content=1;URL=?quest='.$quest_search->data_array[0]['entry'].'>';
158 else
159 $quest_search->createReport($lang['search_results'].' - '.$lang['found'].' '.$number);