Completed
Pull Request — gcconnex (#1531)
by Ilia
19:39
created

start.php ➔ render_create_forms()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 21
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 15
nc 1
nop 2
dl 0
loc 21
rs 9.3142
c 0
b 0
f 0
1
<?php
2
3
/* GCForums
4
 *
5
 * @author Christine Yu <[email protected]>
6
 *
7
 */
8
9
elgg_register_event_handler('init', 'system', 'gcforums_init');
10
11
define("TOTAL_POST", 1);
12
define("TOTAL_TOPICS", 2);
13
define("RECENT_POST", 3);
14
15
function gcforums_init()
16
{
17
	elgg_register_library('elgg:gcforums:functions', elgg_get_plugins_path() . 'gcforums/lib/functions.php');
18
19
	$action_path = elgg_get_plugins_path().'gcforums/actions/gcforums';
20
21
	elgg_register_css('gcforums-css', 'mod/gcforums/css/gcforums-table.css');						// styling the forums table
22
	elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'gcforums_owner_block_menu');	// register menu item in group
23
	elgg_register_page_handler('gcforums', 'gcforums_page_handler');								// page handler for forums
24
	add_group_tool_option('forums', elgg_echo('gcforums:enable_group_forums'), false);				// add option for user to enable
25
26
	// actions for forum creation/editing/deletion (.../action/gcforums/[action]/...)
27
	elgg_register_action('gcforums/edit', $action_path.'/edit.php');
28
	elgg_register_action('gcforums/delete', $action_path.'/delete.php');
29
	elgg_register_action('gcforums/create', $action_path.'/create.php');
30
	elgg_register_action('gcforums/subscribe', $action_path.'/subscribe.php');
31
32
	elgg_register_action('gcforums/move_topic', $action_path.'/move_topic.php');
33
	// put a menu item in the site navigation (JMP request), placed in career dropdown
34
	elgg_register_menu_item('subSite', array(
35
		'name' => 'Forum',
36
		'text' => elgg_echo('gcforums:jmp_menu'),
37
		'href' => elgg_echo('gcforums:jmp_url'),
38
	));
39
}
40
41
42
function gcforums_owner_block_menu($hook, $type, $return, $params)
43
{
44
	$entity = elgg_extract('entity', $params);
45
	if ($entity->type === 'group' && $entity->forums_enable === 'yes') { // display only in group menu and only when user selected to enable forums in group
46
		$url = "gcforums/group/{$params['entity']->guid}";
47
		$item = new ElggMenuItem('gcforums', elgg_echo('gcforums:group_nav_label'), $url);
48
		$return[] = $item;
49
		return $return;
50
	}
51
}
52
53
54
/*
55
 * Page Handler
56
 */
57
function gcforums_page_handler($page)
58
{
59
	$params = array();
60
61
	switch ($page[0]) {
62
		case 'create':
63
			gatekeeper();
64
			$params = render_create_forms($page[2], $page[1]);
65
			break;
66
67
		case 'edit':
68
			gatekeeper();
69
			$params = render_edit_forms($page[1]);
70
			break;
71
72
		case 'topic':
73
			$params = render_forum_topics($page[2]);
74
			break;
75
76
		case 'view':
77
			$params = render_forums($page[1]);
78
			break;
79
80
		case 'group':
81
			$params = render_forums($page[1]);
82
			break;
83
84
		default:
85
			return false;
86
	}
87
88
	$body = elgg_view_layout('forum-content', $params);
89
	echo elgg_view_page($params['title'], $body);
90
}
91
92
93
function render_create_forms($entity_guid, $entity_type)
94
{
95
	// this is the current form (new forum will be placed in this forum)
96
	$entity = get_entity($entity_guid);
97
	assemble_forum_breadcrumb($entity);
98
	$group_guid = gcforums_get_forum_in_group($entity->getGUID(), $entity->getGUID());
99
	elgg_set_page_owner_guid();
100
	$vars['current_entity'] = $entity_guid;
101
	$vars['entity_type'] = $entity_type;
102
	$vars['group_guid'] = $group_guid;
103
104
	$content = elgg_view_form('gcforums/create', array(), $vars);
105
	$title = elgg_echo('gcforums:edit:new_forum:heading', array(elgg_echo("gcforums:translate:{$entity_type}")));
106
107
	$return['filter'] = '';
108
	$return['title'] = $title;
109
	$return['content'] = $content;
110
	return $return;
111
}
112
113
function render_edit_forms($entity_guid, $entity_type = '')
114
{
115
	$entity = get_entity($entity_guid);
116
	assemble_forum_breadcrumb($entity);
117
	elgg_set_page_owner_guid(gcforums_get_forum_in_group($entity->getGUID(), $entity->getGUID()));
118
	$vars['entity_guid'] = $entity_guid;
119
120
	$content = elgg_view_form('gcforums/edit', array(), $vars);
121
	$title = elgg_echo('gcforums:edit:edit_forum:heading', array(elgg_echo("gcforums:translate:{$entity->getSubtype()}")));
122
123
	$return['filter'] = '';
124
	$return['title'] = $title;
125
	$return['content'] = $content;
126
	return $return;
127
}
128
129
/**
130
 * recursively go through the forums and return group entity
131
 * @return integer
132
 */
133
function gcforums_get_forum_in_group($entity_guid_static, $entity_guid)
134
{
135
	$entity = get_entity($entity_guid);
136
	// (base) stop recursing when we reach group guid
137
	if ($entity instanceof ElggGroup) {
138
		return $entity_guid;
139
	} else {
140
		return gcforums_get_forum_in_group($entity_guid_static, $entity->getContainerGUID());
141
	}
142
}
143
144
145
function render_forum_topics($topic_guid)
146
{
147
	elgg_load_css('gcforums-css');
148
	$entity = get_entity($topic_guid);
149
150
	if ($entity instanceof ElggEntity) {
151
152
		$dbprefix = elgg_get_config('dbprefix');
153
		$base_url = elgg_get_site_entity()->getURL();
154
		$group_guid = gcforums_get_forum_in_group($topic_guid, $topic_guid);
155
156
		// set the breadcrumb trail
157
		assemble_forum_breadcrumb($entity);
158
159
		if ($entity->getSubtype() === 'hjforumtopic') {
160
161
			$options = render_edit_options($entity->getGUID(), $entity->getGUID());
162
			if ($options == '') $options = '-';
163
			$topic = get_entity($topic_guid);
164
			$title = $topic->title;
165
			$description = $topic->description;
166
167
			/// owner information
168
			$owner = $topic->getOwnerEntity();
169
			$timestamp = date('Y-m-d H:i:s', $topic->time_created);
170
			$params = array(
171
				'entity' => $topic,
172
				'title' => false,
173
			);
174
175
			$summary = elgg_view('object/elements/summary', $params);
176
			$admin_only = (elgg_is_admin_logged_in()) ? "(guid:{$topic->guid})" : "";
177
			$owner_icon = elgg_view_entity_icon($topic->getOwnerEntity(), 'medium');
178
179
			$content .= "
180
			<div class='topic-owner-information-content'>
181
				<div class='topic-information-options'>{$options} {$admin_only}</div>
182
				<div class='topic-owner-icon'>{$owner_icon}</div>
183
				<div class='topic-owner-information'><b>".elgg_echo('gcforums:user:name')."</b> {$owner->name} ({$owner->username})</div>
184
				<div class='topic-owner-information'><b>".elgg_echo('gcforums:user:email')."</b> {$owner->email}</div>
185
				<div class='topic-owner-information'><b>".elgg_echo('gcforums:user:posting')."</b> {$timestamp}</div>
186
			</div>";
187
188
			$content .= "<div class='topic-content'>{$topic->description}</div>";
189
			$content .= "<h3>Comments</h3>";
190
			$comments = elgg_get_entities(array(
191
				'types' => 'object',
192
				'container_guids' => $topic->guid,
193
				'limit' => 0,
194
			));
195
196
			/// comments
197
			$content .= "<div class='topic-main-comments'>";
198
			foreach ($comments as $comment) {
199
				$options = render_edit_options($comment->getGUID(), $comment->getGUID());
200
				if ($options == '') $options = '-';
201
				$admin_only = (elgg_is_admin_logged_in()) ? "(guid:{$comment->guid})" : "";
202
				$owner_icon = elgg_view_entity_icon($topic->getOwnerEntity(), 'small');
203
				$content .= "
204
				<div class='topic-comments'>
205
					<div class='topic-comment-options'>{$options} {$admin_only}</div>
206
					<div class='comment-owner-information-content'>
207
						<div class='comment-owner-icon'>{$owner_icon} {$comment->getOwnerEntity()->email}</div>
208
					</div>
209
					<div class='topic-comment-content'>{$comment->description}</div>
210
				</div> <br/>";
211
			}
212
			$content .= "</div>";
213
214
			$vars['group_guid'] = $group_guid;
215
			$vars['topic_guid'] = $topic->guid;
216
			$vars['current_entity'] = $topic->guid;
217
			$vars['topic_access'] = $topic->access_id;
218
			$vars['entity_type'] = 'hjforumpost';
219
220
			if (elgg_is_logged_in() && check_entity_relationship(elgg_get_logged_in_user_entity()->getGUID(), 'member', $group_guid)) {
221
				$topic_content .= elgg_view_form('gcforums/create', array(), $vars);
222
				$content .= $topic_content;
223
			}
224
225
			$return['filter'] = '';
226
			$return['title'] = $title;
227
			$return['content'] = $content;
228
			
229
		}
230
231
	} else {
232
233
		$return['filter'] = '';
234
		$return['title'] = '404 - '.elgg_echo('gcforums:notfound');
235
		$return['content'] = elgg_echo('gcforums:notfound');
236
		
237
	}
238
	return $return;
239
}
240
241
242
243
/**
244
 * @param ElggEntity $entity
245
 */
246
function assemble_forum_breadcrumb($entity)
247
{
248
	$forum_guid = $entity->guid;
249
	if ($entity instanceof ElggGroup) {
250
		elgg_set_page_owner_guid($entity->getGUID());
251
		elgg_push_breadcrumb(gc_explode_translation($entity->name, get_current_language()), $entity->getURL());
252
		elgg_push_breadcrumb('Group Forums');
253
	} else {
254
		elgg_set_page_owner_guid(gcforums_get_forum_in_group($entity->getGUID(), $entity->getGUID()));
255
		$breadcrumb_array = array();
256
		$breadcrumb_array = assemble_nested_forums(array(), $forum_guid, $forum_guid);
257
		$breadcrumb_array = array_reverse($breadcrumb_array);
258
259
		foreach ($breadcrumb_array as $trail_id => $trail) {
260
			elgg_push_breadcrumb(gc_explode_translation($trail[1], get_current_language()), $trail[2]);
261
		}
262
	}
263
}
264
265
/**
266
 * Create list of options to modify forums
267
 *
268
 * @param int $forum_guid
269
 *
270
 */
271
function render_forums($forum_guid)
272
{
273
	elgg_load_css('gcforums-css');
274
	$entity = get_entity($forum_guid);
275
	
276
277
	if ($entity instanceof ElggEntity) {
278
279
		$dbprefix = elgg_get_config('dbprefix');
280
		$base_url = elgg_get_site_entity()->getURL();
281
		$group_entity = get_entity(gcforums_get_forum_in_group($entity->getGUID(), $entity->getGUID()));
282
		$current_user = elgg_get_logged_in_user_entity();
283
		// set the breadcrumb trail
284
		assemble_forum_breadcrumb($entity);
285
286
		// forums will always remain as content within a group
287
		elgg_set_page_owner_guid($group_entity->getGUID());
288
		$return = array();
289
290
		if ($forum_guid !== $group_entity->guid)
291
			$content .= "<div class='forums-menu-buttons'>".gcforums_menu_buttons($entity->getGUID(), $group_entity->getGUID())."</div> ";
292
293
294
		// administrative only tool to fix up all the topics that were misplaced
295
		if (elgg_is_admin_logged_in()) {
296
			$content .= elgg_view_form('gcforums/move_topic');
297
		}
298
299
		$query = "SELECT * FROM elggentities e, elggentity_subtypes es WHERE e.subtype = es.id AND e.container_guid = {$forum_guid} AND es.subtype = 'hjforumtopic'";
300
		$topics = get_data($query);
301
302
		// sort
303
		usort($topics, function($a, $b) {
304
		    return $b->guid - $a->guid;
305
		});
306
307
		if (count($topics) > 0 && !$entity->enable_posting) {
308
			$content .= "
309
				<div class='topic-main-box'>
310
					<div style='background: #e6e6e6; width:100%;' >
311
						<div class='topic-header'>".elgg_echo('gcforums:translate:hjforumtopic')."
312
							<div class='topic-information'>options</div>
313
							<div class='topic-information'>".elgg_echo('gcforums:translate:last_posted')."</div>
314
							<div class='topic-information'>".elgg_echo('gcforums:translate:replies')."</div>
315
							<div class='topic-information'>".elgg_echo('gcforums:translate:topic_starter')."</div>
316
						</div>"
317
318
			/// topic
319
			foreach ($topics as $topic) {
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected T_FOREACH
Loading history...
320
				
321
				$topic = get_entity($topic->guid);
322
				$hyperlink = "<a href='{$base_url}gcforums/topic/view/{$topic->guid}'><strong>{$topic->title}</strong></a>";
323
				if (!$topic->guid) continue;
324
				$query = "SELECT e.guid, ue.username, e.time_created
325
							FROM {$dbprefix}entities e, {$dbprefix}users_entity ue
326
							WHERE e.container_guid = {$topic->guid} AND e.owner_guid = ue.guid";
327
				$replies = get_data($query);
328
329
330
				$total_replies = count($replies);
331
				$topic_starter = get_user($topic->owner_guid)->username;
332
				$time_posted = $replies[$total_replies - 1]->time_created;
333
				$time_posted = date('Y-m-d H:i:s', $time_posted);
334
335
				$options = render_edit_options($topic->guid, $group_entity->guid);
336
				if ($options == '') $options = '-';
337
				$admin_only = (elgg_is_admin_logged_in()) ? "(guid:{$topic->guid})" : "";
338
				$last_post = ($total_replies <= 0) ? elgg_echo('gcforums:no_posts') : "<div>{$replies[$total_replies - 1]->username}</div> <div>{$time_posted}</div>";
339
340
				$content .= "
341
				<div class='topic-info-header'>
342
					<div class='topic-description'>{$hyperlink} {$admin_only}</div>
343
					<div class='topic-options-edit'>{$options}</div>
344
					<div class='topic-options'>{$last_post}</div>
345
					<div class='topic-options'>{$total_replies}</div>
346
					<div class='topic-options'>{$topic_starter}</div>
347
				</div>";
348
			}
349
350
			$content .= "</div> </div> </p> <br/>";
351
		}
352
353
354
355
		/// display the categories if the forum has this enabled
356
		if ($entity->enable_subcategories || $entity instanceof ElggGroup) {
357
			
358
			$categories = elgg_get_entities(array(
359
				'types' => 'object',
360
				'subtypes' => 'hjforumcategory',
361
				'limit' => false,
362
				'container_guid' => $forum_guid
363
			));
364
365
			/// category
366
			foreach ($categories as $category) {
367
				$options = render_edit_options($category->guid, $group_entity->getGUID());
368
				if ($options == '') $options = '-';
369
				$admin_only = (elgg_is_admin_logged_in()) ? "(guid:{$category->guid})" : "";
370
				$content .= "
371
				<p>
372
					<div class='category-main-box'>
373
						<div class='category-options'>{$options} {$admin_only}</div>
374
						<h1>{$category->title}</h1>
375
						<div class='category-description'>{$category->description}</div>
376
					</div>";
377
378
379
				$forums = elgg_get_entities_from_relationship(array(
380
					'relationship' => 'filed_in',
381
					'relationship_guid' => $category->getGUID(),
382
					'container_guid' => $entity->getGUID(),
383
					'inverse_relationship' => true,
384
					'limit' => false
385
				));
386
			
387
				if (sizeof($forums) > 0) {
388
389
					$content .= "<div class='forum-main-box'>
390
									<div style='background: #e6e6e6; width:100%;' >
391
										<div class='forum-header'>Forum
392
											<div class='forum-information'>options</div>
393
											<div class='forum-information'>".elgg_echo('gcforums:translate:total_topics')."</div>
394
											<div class='forum-information'>".elgg_echo('gcforums:translate:total_replies')."</div>
395
											<div class='forum-information'>".elgg_echo('gcforums:translate:last_posted')."</div>
396
										</div>";
397
398
					/// forums
399
					foreach ($forums as $forum) {
400
						$total_topics = get_forums_statistics_information($forum->guid, TOTAL_TOPICS);
401
						$total_posts = get_forums_statistics_information($forum->guid, TOTAL_POST);
402
						$recent_post = get_forums_statistics_information($forum->guid, RECENT_POST);
403
						$options = render_edit_options($forum->getGUID(), $group_entity->getGUID());
404
405
						$admin_only = (elgg_is_admin_logged_in()) ? "(guid:{$forum->guid})" : "";
406
407
						$hyperlink = "<a href='{$base_url}gcforums/view/{$forum->getGUID()}'><strong>{$forum->title}</strong></a>";
408
409
						$content .= "<div class='forum-info-header'>
410
										<div class='forum-description'>{$hyperlink} {$admin_only}
411
											<div class='forum-description-text'>{$forum->description}</div>
412
										</div>
413
										<div class='forum-options-edit'>{$options}</div>
414
										<div class='forum-options'>{$total_topics}</div>
415
										<div class='forum-options'>{$total_posts}</div>
416
										<div class='forum-options'>{$recent_post}</div>
417
									</div>";
418
					}
419
					$content .= "</div> </div> </p> <br/>";
420
421
				} else {
422
					$content .= "<div class='forum-empty'>".elgg_echo('gcforums:forums_not_available')."</div>";
423
				}
424
			}
425
426
427
			if (elgg_is_admin_logged_in() /*|| $group_entity->getOwnerGUID() == $current_user->guid || check_entity_relationship($current_user->getGUID(), 'operator', $group_entity->getGUID())*/) {
428
429
				/// there are the problem where user creates forum in the existing forum with categories enabled, show the forums without categories
430
				$forums = elgg_get_entities_from_relationship(array(
431
						'relationship' => 'descendant',
432
						'container_guid' => $forum_guid,
433
						'subtypes' => array('hjforum'),
434
						'relationship_guid' => $forum_guid,
435
						'inverse_relationship' => true,
436
						'types' => 'object',
437
						'limit' => 0,
438
					));
439
440
				if (sizeof($forums) > 0) {
441
						
442
					$content .= "
443
					<div class='forum-category-issue-notice'>
444
						<section class='alert alert-danger'>
445
						<strong>This only shows up for administrators</strong>.
446
						If you don't see a specific forum appearing above, you can correct that by editing the forums below. 
447
						</section>
448
						<div class='forum-main-box'>
449
							<div style='background: #e6e6e6; width:100%;' >
450
								<div class='forum-header'>Forum
451
									<div class='forum-information'>options</div>
452
									<div class='forum-information'>".elgg_echo('gcforums:translate:total_topics')."</div>
453
									<div class='forum-information'>".elgg_echo('gcforums:translate:total_replies')."</div>
454
									<div class='forum-information'>".elgg_echo('gcforums:translate:last_posted')."</div>
455
								</div>";
456
457
					foreach ($forums as $forum) {
458
459
							$query = "SELECT COUNT(guid_one) AS total FROM elggentity_relationships WHERE guid_one = '{$forum->guid}' AND relationship = 'filed_in' AND guid_two = 0";
460
							$is_filed_in_category = get_data($query);
461
462
							//if ($is_filed_in_category[0]->total == 1) {
463
464
								$total_topics = get_forums_statistics_information($forum->guid, TOTAL_TOPICS);
465
								$total_posts = get_forums_statistics_information($forum->guid, TOTAL_POST);
466
								$recent_post = get_forums_statistics_information($forum->guid, RECENT_POST);
467
								$options = render_edit_options($forum->getGUID(), $group_entity->getGUID());
468
								if ($options == '') $options = '-';
469
								$admin_only = (elgg_is_admin_logged_in()) ? "(guid:{$forum->guid})" : "";
470
								$hyperlink = "<a href='{$base_url}gcforums/view/{$forum->getGUID()}'><strong>{$forum->title}</strong></a>";
471
472
								$content .= "
473
									<div class='forum-info-header'>
474
										<div class='forum-description'>{$hyperlink} {$admin_only}
475
											<div class='forum-description-text'>{$forum->description}</div>
476
										</div>
477
										<div class='forum-options-edit'>{$options}</div>
478
										<div class='forum-options'>{$total_topics}</div>
479
										<div class='forum-options'>{$total_posts}</div>
480
										<div class='forum-options'>{$recent_post}</div>
481
									</div>";
482
							//}
483
					}
484
485
					$content .= "</div> </div> </div> </p> <br/>";
486
				}
487
			}
488
489
490
491
		} else {
492
493
			/// display forums with no categories
494
			$forums = elgg_get_entities_from_relationship(array(
495
					'relationship' => 'descendant',
496
					'subtypes' => array('hjforum'),
497
					'relationship_guid' => $forum_guid,
498
					'inverse_relationship' => true,
499
					'types' => 'object',
500
					'limit' => 0,
501
				));
502
503
			if (sizeof($forums) > 0) {
504
				$content .= "
505
					<div class='forum-main-box'>
506
						<div style='background: #e6e6e6; width:100%;' >
507
							<div class='forum-header'>Forum
508
								<div class='forum-information'>options</div>
509
								<div class='forum-information'>".elgg_echo('gcforums:translate:total_topics')."</div>
510
								<div class='forum-information'>".elgg_echo('gcforums:translate:total_replies')."</div>
511
								<div class='forum-information'>".elgg_echo('gcforums:translate:last_posted')."</div>
512
							</div>";
513
514
				foreach ($forums as $forum) {
515
					
516
						if ($forum->getContainerGUID() != $entity->getGUID()) continue;
517
						
518
						$total_topics = get_forums_statistics_information($forum->guid, TOTAL_TOPICS);
519
						$total_posts = get_forums_statistics_information($forum->guid, TOTAL_POST);
520
						$recent_post = get_forums_statistics_information($forum->guid, RECENT_POST);
521
						$options = render_edit_options($forum->getGUID(), $group_entity->getGUID());
522
						if ($options == '') $options = '-';
523
						$hyperlink = "<a href='{$base_url}gcforums/view/{$forum->getGUID()}'><strong>{$forum->title}</strong></a>";
524
						$admin_only = (elgg_is_admin_logged_in()) ? "(guid:{$forum->guid})" : "";
525
526
						$content .= "
527
							<div class='forum-info-header'>
528
								<div class='forum-description'>{$hyperlink} {$admin_only}
529
									<div class='forum-description-text'>{$forum->description}</div>
530
								</div>
531
								<div class='forum-options-edit'>{$options}</div>
532
								<div class='forum-options'>{$total_topics}</div>
533
								<div class='forum-options'>{$total_posts}</div>
534
								<div class='forum-options'>{$recent_post}</div>
535
							</div>";
536
				}
537
538
				$content .= "</div> </div> </p> <br/>";
539
			}
540
		}
541
542
		$title = $entity->title;
543
		if (!$title) $title = elgg_echo('gcforum:heading:default_title');
544
545
546
		$return['filter'] = '';
547
		$return['title'] = gc_explode_translation($title, get_current_language());
548
		$return['content'] = $content;
549
	
550
	} else {
551
		$return['filter'] = '';
552
		$return['title'] = '404 - '.elgg_echo('gcforums:notfound');
553
		$return['content'] = elgg_echo('gcforums:notfound');
554
	}
555
556
	return $return;
557
}
558
559
560
/**
561
 * TOTAL_POST : 1
562
 * TOTAL_TOPICS : 2
563
 * RECENT_POST : 3
564
 * @param integer $type
565
 */
566
function get_forums_statistics_information($container_guid, $type)
567
{
568
	$dbprefix = elgg_get_config('dbprefix');
569
570
	switch ($type) {
571
		case 1:
572
			$query = "SELECT COUNT(r.guid_one) AS total
573
				FROM {$dbprefix}entity_relationships r, {$dbprefix}entities e, {$dbprefix}entity_subtypes es
574
				WHERE r.guid_one = e.guid AND e.subtype = es.id AND r.guid_two = {$container_guid} AND es.subtype = 'hjforumpost' AND e.access_id IN (1, 2)";
575
			break;
576
577
		case 2:
578
			$query = "SELECT COUNT(r.guid_one) AS total
579
				FROM {$dbprefix}entity_relationships r, {$dbprefix}entities e, {$dbprefix}entity_subtypes es
580
				WHERE r.guid_one = e.guid AND e.subtype = es.id AND r.guid_two = {$container_guid} AND es.subtype = 'hjforumtopic' AND e.access_id IN (1, 2)";
581
				break;
582
583
		case 3:
584
			$query = "SELECT r.guid_one, r.relationship, r.guid_two, e.subtype, es.subtype, max(e.time_created) AS time_created, ue.email, ue.username, ue.name
585
				FROM {$dbprefix}entity_relationships r, {$dbprefix}entities e, {$dbprefix}entity_subtypes es, {$dbprefix}users_entity ue
586
				WHERE r.guid_one = e.guid AND e.subtype = es.id AND r.guid_two = {$container_guid} AND es.subtype = 'hjforumtopic' AND ue.guid = e.owner_guid LIMIT 1";
587
588
			$post = get_data($query);
589
			$recent_poster = elgg_echo("gcforums:no_posts");
590
			if ($post[0]->email) {
591
				$timestamp = date('Y-m-d', $post[0]->time_created);
592
				// Output display name - nick
593
				$recent_poster = "<div>{$post[0]->username}</div> <div>{$timestamp}</div>";
594
			}
595
			return $recent_poster;
596
			break; // will never reach this break statement
597
598
		default:
599
	}
600
601
	$total = get_data($query);
602
	$total = $total[0]->total;
603
604
	return $total;
605
}
606
607
608
/// recursively go through the nested forums to create the breadcrumb
609
function assemble_nested_forums($breadcrumb, $forum_guid, $recurse_forum_guid) {
610
	$lang = get_current_language();
611
	$entity = get_entity($recurse_forum_guid);
612
	if ($entity instanceof ElggGroup && $entity->guid != $forum_guid) {
613
		$breadcrumb[$entity->getGUID()] = array($entity->guid, gc_explode_translation($entity->name,$lang), "profile/{$entity->guid}");
614
		return $breadcrumb;
615
	} else {
616
		$breadcrumb[$entity->guid] = array($entity->guid, gc_explode_translation($entity->title,$lang), "gcforums/view/{$entity->guid}");	
617
		return assemble_nested_forums($breadcrumb, $forum_guid, $entity->getContainerGUID());
618
	}
619
}
620
621
622
/**
623
 * Create list of options to modify forums
624
 *
625
 * @param int $object_guid
626
 * @param int $group_guid
627
 *
628
 */
629
function render_edit_options($object_guid, $group_guid)
630
{
631
	$options = array();
632
	$group_entity = get_entity($group_guid);
633
	$current_user = elgg_get_logged_in_user_entity();
634
	$user = $current_user;
635
	$entity = get_entity($object_guid);
636
	$entity_type = $entity->getSubtype();
637
638
	if ($entity->getSubtype() !== 'hjforumpost' && elgg_is_admin_logged_in()) {
639
		$options['access'] = '<strong>' . get_readable_access_level($entity->access_id) . '</strong>';
640
	}
641
642
	// subscription
643
	if (elgg_is_logged_in()) {
644
		if (elgg_is_active_plugin('cp_notifications')) {
645
			$email_subscription = check_entity_relationship($current_user->getGUID(), 'cp_subscribed_to_email', $entity->getGUID());
646
			$site_subscription = check_entity_relationship($current_user->getGUID(), 'cp_subscribed_to_site_mail', $entity->getGUID());
647
			$btnSubscribe = ($email_subscription || $site_subscription) ? elgg_echo('gcforums:translate:unsubscribe') : elgg_echo('gcforums:translate:subscribe');
648
		} else {
649
			$subscription = check_entity_relationship($user->guid, 'subscribed', $object_guid);
650
			$btnSubscribe = ($subscription) ? elgg_echo('gcforums:translate:unsubscribe') : elgg_echo('gcforums:translate:subscribe');
651
		}
652
653
654
		if ($entity->getSubtype() !== 'hjforumcategory') {
655
			$url = elgg_add_action_tokens_to_url(elgg_get_site_url()."action/gcforums/subscribe?guid={$entity->getGUID()}");
656
			$options['subscription'] = "<div class='edit-options-{$entity_type}'><a href='{$url}'>{$btnSubscribe}</a></div>";
657
		}
658
659
660
		if (!$entity->enable_posting && check_entity_relationship($current_user->guid, 'member', $group_entity->guid) && $entity->getSubtype() === 'hjforum') {
661
			$url = elgg_get_site_url()."gcforums/create/hjforumtopic/{$object_guid}";
662
			$menu_label = elgg_echo("gcforums:translate:new_topic");
663
			$options['new_topic'] = "<a href='{$url}'>{$menu_label}</a>";
664
		}
665
	}
666
667
	// checks if user is admin, group owner, or moderator
668
	if (elgg_is_admin_logged_in() || $group_entity->getOwnerGUID() == $current_user->guid /*|| check_entity_relationship($current_user->getGUID(), 'operator', $group_entity->getGUID())*/) {
669
		$object_menu_items = ($entity->getSubtype() === 'hjforum') ? array("new_subcategory", "new_subforum", "edit") : array('edit', 'delete');
670
671
		if ($entity->getSubtype() === 'hjforumpost') {
672
			$object_menu_items = array("delete");
673
		}
674
		foreach ($object_menu_items as $menu_item) {
675
			$url = "";
676
			// check if new posting link and it is disabled (enabled == disabled)
677
			switch ($menu_item) {
678
				case 'new_subcategory':
679
					$url = ($entity->enable_subcategories) ? elgg_get_site_url()."gcforums/create/hjforumcategory/{$object_guid}" : "";
680
					break;
681
				case 'new_subforum':
682
					$url = elgg_get_site_url()."gcforums/create/hjforum/{$object_guid}";
683
					break;
684
				case 'edit':
685
					$url = elgg_get_site_url()."gcforums/edit/{$object_guid}";
686
					break;
687
				case 'delete':
688
					$url = elgg_add_action_tokens_to_url(elgg_get_site_url()."action/gcforums/delete?guid={$entity->getGUID()}");
689
					$style = "style='font-weight:bold; color:#d84e2f;'";
690
					break;
691
			}
692
693
			if ($url !== "") {
694
				$menu_label = elgg_echo("gcforums:translate:{$menu_item}");
695
				$options[$menu_item] = "<a {$style} href='{$url}'>{$menu_label}</a>";
696
			}
697
		}
698
	}
699
700
	foreach ($options as $key => $option) {
701
		$edit_options .= "<div class='edit-options-{$entity_type}'>{$option}</div>";
702
	}
703
704
	if (elgg_is_logged_in() && ($current_user->isAdmin() || $group_entity->getOwnerGUID() == $current_user->guid)
705
		&& $entity->getSubtype() !== 'hjforumpost' && $entity->getSubtype() !== 'hjforumtopic' && $entity->getSubtype() !== 'hjforumcategory') {
706
		$edit_options .= elgg_view('alerts/delete', array('entity' => $entity));
707
	}
708
709
	return $edit_options;
710
}
711
712
713
714
/**
715
 * @param integer|null $forum_guid
716
 * @param integer|null $group_guid
717
 */
718
function gcforums_menu_buttons($forum_guid, $group_guid, $is_topic=false)
719
{
720
	// main page if forum_guid is not present
721
	elgg_load_css('gcforums-css');
722
	$group_entity = get_entity($group_guid);
723
	$current_user = elgg_get_logged_in_user_entity();
724
	$entity = get_entity($forum_guid);
725
	$entity_type = $entity->getSubtype();
726
727
	$current_entity_guid = get_entity($forum_guid);
728
729
730
	// @TODO: check if it is a topic
731
	if (elgg_is_logged_in() && (elgg_is_admin_logged_in() || check_entity_relationship($current_user->getGUID(), 'member', $group_entity->getGUID()))) {
732
		$isOperator = check_entity_relationship($current_user->getGUID(), 'operator', $group_entity->getGUID());
733
		$button_class = "elgg-button elgg-button-action btn btn-default";
734
735
		// do not display the button menu if the object is a forum topic
736
		if (($current_user->isAdmin() || $isOperator || $group_entity->getOwnerGUID() === $current_user->getGUID()) && !$is_topic) {
737
			$gcforum_types = array('hjforumcategory', 'hjforumtopic', 'hjforum');
738
739
			$button_array = array();
740
			foreach ($gcforum_types as $gcforum_type) {
741
				$url = "gcforums/create/{$gcforum_type}/{$forum_guid}";
742
				if ($gcforum_type === 'hjforumcategory') {
743
					$button_array[$gcforum_type] = ($entity->enable_subcategories || $forum_guid == $group_guid)
744
						? elgg_view('output/url', array(
745
							"text" => elgg_echo('gcforums:new_hjforumcategory'),
746
							"href" => $url,
747
							'class' => $button_class))
748
						: "";
749
				}
750
751
				if ($gcforum_type === 'hjforumtopic' && $entity->getGUID() !== $group_entity->getGUID()) {
752
					$button_array[$gcforum_type] = (!$entity->enable_posting && $forum_guid !== null)
753
						? elgg_view('output/url', array(
754
							"text" => elgg_echo('gcforums:new_hjforumtopic'),
755
							"href" => $url,
756
							'class' => $button_class))
757
						: "";
758
				}
759
760
				if ($gcforum_type === 'hjforum') {
761
					$button_array[$gcforum_type] = elgg_view('output/url', array("text" => elgg_echo('gcforums:new_hjforum'), "href" => $url, 'class' => $button_class));
762
				}
763
			}
764
765
			/// edit or delete current forum
766
			if ($forum_guid != $group_guid && ($current_user->isAdmin() || $group_entity->getOwnerGUID() == $current_user->guid)) {
767
				$url = "gcforums/edit/{$forum_guid}";
768
				$button_array['edit_forum'] = elgg_view('output/url', array("text" => elgg_echo('gcforums:edit_hjforum'), "href" => $url, 'class' => $button_class));
769
				$button_array['delete'] = elgg_view('alerts/delete', array('entity' => $entity, 'is_menu_buttons' => true));
770
			}
771
772
			foreach ($button_array as $key => $value) {
773
				$menu_buttons .= " {$value} ";
774
			}
775
776
			return "<div>{$menu_buttons}</div>";
777
		}
778
779
		if (elgg_is_logged_in() && check_entity_relationship($current_user->guid, 'member', $group_entity->guid) && $group_entity->getGUID() !== $entity->getGUID() && !$entity->enable_posting) {
780
			$url = "gcforums/create/hjforumtopic/{$forum_guid}";
781
			$new_forum_topic_button = ($forum_guid) ? elgg_view('output/url', array("text" => elgg_echo('gcforums:new_hjforumtopic'), "href" => $url, 'class' => $button_class)) : "";
782
		}
783
784
		return "<div>{$new_forum_topic_button}</div>";
785
	}
786
}
787