1: <?php
2: /**********************
3: *
4: * Tournament
5: *
6: *********************/
7:
8: require_once(dirname(__FILE__)."/classes/DbPackage.class.php");
9: require_once(dirname(__FILE__)."/classes/DbEditors.class.php");
10:
11:
12: /**
13: * Implementation of hook_menu().
14: */
15: function chgk_db_menu() {
16: #print_r(debug_backtrace());
17: $items['tour/%/view'] = array(
18: 'title' => 'Читать',
19: 'type' => MENU_DEFAULT_LOCAL_TASK,
20: 'weight' => 0
21: );
22:
23: $items['tour/%/print'] = array(
24: 'path' => 'print',
25: 'title' => 'Печатать',
26: 'page callback' => 'chgk_db_print',
27: 'page arguments' => array(1),
28: 'access callback' => "chgk_db_access",
29: 'access arguments' => array(1, 'print'),
30: 'localized_options' => array('attributes' => array('target'=>'_blank')),
31: 'type' => MENU_LOCAL_TASK,
32: 'weight' => 1
33: );
34:
35:
36: $items['tour/%/fb2'] = array(
37: 'path' => 'tour/%/fb2',
38: 'title' => 'FB2',
39: 'page callback' => 'chgk_db_fb2',
40: 'page arguments' => array(1),
41: 'access callback' => "chgk_db_access",
42: 'access arguments' => array(1, 'fb2'),
43: 'type' => MENU_LOCAL_TASK,
44: 'weight' => 2
45:
46: );
47: $items['tree'] = array(
48: 'path' => 'tree',
49: 'title' => 'Все турниры',
50: 'page callback' => 'chgk_db_tree',
51: 'access callback' => "chgk_db_access",
52: 'type' => MENU_NORMAL_ITEM
53: );
54:
55: $items['editors'] = array(
56: 'path' => 'editors',
57: 'title' => 'Редакторы',
58: 'page callback' => 'chgk_db_editors',
59: 'access callback' => "chgk_db_access",
60: 'type' => MENU_NORMAL_ITEM
61: );
62:
63: $items['tour'] = array(
64: 'path' => 'tour',
65: 'page callback' => 'chgk_db_tour',
66: 'page arguments' => array(1),
67: 'access callback' => "chgk_db_access"
68: );
69:
70:
71: return $items;
72: }
73:
74: /**
75: * Implementation of hook_theme().
76: */
77: function chgk_db_theme() {
78: $items['chgk_db_print'] = array(
79: 'arguments' => array(
80: 'title' =>'',
81: 'content' => '',
82: 'link' => ''
83:
84:
85: ),
86: 'template'=>'templates/chgk_db_print'
87: );
88: $items['chgk_db_field'] = array(
89: 'arguments' => array(
90: 'field' => NULL
91: )
92: );
93: $items['chgk_db_tour'] = array(
94: 'arguments' => array(
95: 'tour'=>NULL,
96: 'alone' => TRUE
97: ),
98: 'template'=>'templates/chgk_db_tour'
99: );
100:
101: $items['chgk_db_tour_fb2'] = array(
102: 'arguments' => array(
103: 'tour'=>NULL,
104: 'alone' => TRUE
105: ),
106: 'template'=>'templates/chgk_db_tour_fb2'
107: );
108:
109: $items['chgk_db_tours_fb2'] = array(
110: 'arguments' => array(
111: 'tournament'=>'',
112: ),
113: 'template'=>'templates/chgk_db_tours_fb2'
114: );
115:
116:
117:
118: $items['chgk_db_question'] = array(
119: 'arguments' => array(
120: 'question'=>NULL
121: ),
122: 'template'=>'templates/chgk_db_question'
123: );
124:
125: $items['chgk_db_question_fb2'] = array(
126: 'arguments' => array(
127: 'question'=>NULL
128: ),
129: 'template'=>'templates/chgk_db_question_fb2'
130: );
131:
132:
133: $items['chgk_db_jeopardy_question'] = array(
134: 'arguments' => array(
135: 'question'=>NULL
136: ),
137: 'template'=>'templates/chgk_db_jeopardy_question'
138: );
139:
140: $items['chgk_db_champ_full'] = array(
141: 'arguments' => array(
142: 'tour' => NULL
143: ),
144: 'template'=>'templates/chgk_db_champ_full'
145: );
146: $items['chgk_db_fb2'] = array(
147: 'arguments' => array('tournament'=>''),
148: 'template' => 'templates/chgk_db_fb2'
149: );
150: return $items;
151: }
152:
153: function chgk_db_print($string) {
154: $tournament = DbPackage::newFromDb($string);
155: print $tournament->getPrintVersion();
156: }
157:
158: function chgk_db_tour($name) {
159: if (empty($name)) {
160: $tournament = DbPackage::newRoot();
161: } else {
162: $tournament = DbPackage::newFromDb($name);
163: }
164: drupal_set_title($tournament->getFullTitle());
165: $breadcrumb = array_merge(drupal_get_breadcrumb(),$tournament->getBreadcrumb());
166: drupal_set_breadcrumb($breadcrumb);
167: return $tournament->getHtmlContent();
168: }
169:
170: function chgk_db_tree() {
171: $class = DbPackage::newRoot();
172: $class -> loadTree();
173: drupal_set_title('Все турниры');
174: # $breadcrumb = array_merge(drupal_get_breadcrumb(),$tournament->getBreadcrumb());
175: drupal_set_breadcrumb($breadcrumb);
176:
177: return $class->htmlTree()."\n";
178: }
179:
180: function chgk_db_fb2($string) {
181: $tournament = DbPackage::newFromDb($string);
182: $xml = $tournament->getFb2();
183: if (!$xml) {
184: print "Something is wrong :(";
185: exit;
186: }
187: $filename = "$string.fb2";
188: $zipname = $filename.".zip";
189:
190: header("Content-Type: application/octet-stream\n");
191: header("Content-Type: application/force-download\n");
192: header("Content-Type: application/download\n");
193: header("Content-Type: application/x-zip-compressed; name=$filename\n");
194: header("Content-Disposition: attachment; filename=$filename.zip \n");
195: chdir(file_directory_temp());
196: $f = fopen ($filename, "w");
197: fputs($f, $xml);
198: fclose($f);
199: system("zip $zipname $filename>/dev/null");
200: print passthru("cat $zipname");
201: exit;
202: }
203:
204:
205: function chgk_db_access($tour=NULL, $action ='') {
206: if ($action == 'fb2') {
207: $tournament = DbPackage::newFromDb($tour);
208: if (!$tournament->hasFb2()) {
209: return FALSE;
210: }
211: } elseif ($action == 'print') {
212: $tournament = DbPackage::newFromDb($tour);
213: if (!$tournament->hasPrintVersion()) {
214: return FALSE;
215: }
216: }
217: return TRUE;
218: }
219:
220: function chgk_db_search($op = 'search', $keys = NULL, $skip_access_check = FALSE) {
221: if ($op == 'name') {
222: return 'Вопросы';
223: } elseif( $op == 'search') {
224: $db = new DbDatabase();
225: $res = $db->getFulltextSearchRes($keys);
226: $factory = new DbQuestionFactory();
227:
228: while($a = db_fetch_object($res)) {
229: $q = $factory->getQuestion($a);
230: $q->setSearchString($keys);
231: $results[] = array(
232: 'link' => $q->getUrl(),
233: 'title' => $q->getSearchTitle(),
234: 'snippet' => $q->getHtml()
235: );
236: }
237: return $results;
238:
239: }
240: return true;
241: }
242:
243: function chgk_db_form_alter(&$form, &$form_state) {
244: if ($form['#submit'][0] == 'search_box_form_submit') {
245: $form['#submit'][] = 'chgk_db_search_box_submit';
246: }
247: }
248: function chgk_db_editors() {
249: if ($id = arg(1)) {
250: $author = new DbEditor($id);
251: drupal_set_title($author->getFullName());
252: $breadcrumb = array_merge(
253: drupal_get_breadcrumb(),
254: $author->getBreadcrumb());
255: drupal_set_breadcrumb($breadcrumb);
256:
257: return $author->getHtmlPage();
258: } else {
259: $authorsEngine = new DbEditors();
260: return $authorsEngine->getAllHtml();
261: }
262: }
263:
264: function chgk_db_search_box_submit($form, &$form_state) {
265: $form_id = $form['form_id']['#value'];
266: $form_state['redirect'] = 'search/chgk_db/'. trim($form_state['values'][$form_id]);
267: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>