123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- <?php
- /**
- * Discussion function library
- */
- /**
- * List all discussion topics
- */
- function discussion_handle_all_page() {
- elgg_pop_breadcrumb();
- elgg_push_breadcrumb(elgg_echo('discussion'));
- $content = elgg_list_entities(array(
- 'type' => 'object',
- 'subtype' => 'groupforumtopic',
- 'order_by' => 'e.last_action desc',
- 'limit' => max(20, elgg_get_config('default_limit')),
- 'full_view' => false,
- 'no_results' => elgg_echo('discussion:none'),
- 'preload_owners' => true,
- 'preload_containers' => true,
- ));
- $title = elgg_echo('discussion:latest');
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'sidebar' => elgg_view('discussion/sidebar'),
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * List discussion topics in a group
- *
- * @param int $guid Group entity GUID
- */
- function discussion_handle_list_page($guid) {
- elgg_set_page_owner_guid($guid);
- elgg_group_gatekeeper();
- $group = get_entity($guid);
- if (!elgg_instanceof($group, 'group')) {
- forward('', '404');
- }
- elgg_push_breadcrumb($group->name, $group->getURL());
- elgg_push_breadcrumb(elgg_echo('item:object:groupforumtopic'));
- elgg_register_title_button();
- $title = elgg_echo('item:object:groupforumtopic');
- $options = array(
- 'type' => 'object',
- 'subtype' => 'groupforumtopic',
- 'limit' => max(20, elgg_get_config('default_limit')),
- 'order_by' => 'e.last_action desc',
- 'container_guid' => $guid,
- 'full_view' => false,
- 'no_results' => elgg_echo('discussion:none'),
- 'preload_owners' => true,
- );
- $content = elgg_list_entities($options);
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'sidebar' => elgg_view('discussion/sidebar'),
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Edit or add a discussion topic
- *
- * @param string $type 'add' or 'edit'
- * @param int $guid GUID of group or topic
- */
- function discussion_handle_edit_page($type, $guid) {
- elgg_gatekeeper();
- if ($type == 'add') {
- $group = get_entity($guid);
- if (!elgg_instanceof($group, 'group')) {
- register_error(elgg_echo('group:notfound'));
- forward();
- }
- // make sure user has permissions to add a topic to container
- if (!$group->canWriteToContainer(0, 'object', 'groupforumtopic')) {
- register_error(elgg_echo('groups:permissions:error'));
- forward($group->getURL());
- }
- $title = elgg_echo('groups:addtopic');
- elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid");
- elgg_push_breadcrumb($title);
- $body_vars = discussion_prepare_form_vars();
- $content = elgg_view_form('discussion/save', array(), $body_vars);
- } else {
- $topic = get_entity($guid);
- if (!elgg_instanceof($topic, 'object', 'groupforumtopic') || !$topic->canEdit()) {
- register_error(elgg_echo('discussion:topic:notfound'));
- forward();
- }
- $group = $topic->getContainerEntity();
- if (!elgg_instanceof($group, 'group')) {
- register_error(elgg_echo('group:notfound'));
- forward();
- }
- $title = elgg_echo('groups:edittopic');
- elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid");
- elgg_push_breadcrumb($topic->title, $topic->getURL());
- elgg_push_breadcrumb($title);
- $body_vars = discussion_prepare_form_vars($topic);
- $content = elgg_view_form('discussion/save', array(), $body_vars);
- }
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'sidebar' => elgg_view('discussion/sidebar/edit'),
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * Edit discussion reply
- *
- * @param string $type 'edit'
- * @param int $guid GUID of group or topic
- */
- function discussion_handle_reply_edit_page($type, $guid) {
- elgg_gatekeeper();
- if ($type == 'edit') {
- $reply = get_entity($guid);
- if (!elgg_instanceof($reply, 'object', 'discussion_reply', 'ElggDiscussionReply') || !$reply->canEdit()) {
- register_error(elgg_echo('discussion:reply:error:notfound'));
- forward();
- }
- $topic = $reply->getContainerEntity();
- if (!elgg_instanceof($topic, 'object', 'groupforumtopic')) {
- register_error(elgg_echo('discussion:topic:notfound'));
- forward();
- }
- $group = $topic->getContainerEntity();
- if (!elgg_instanceof($group, 'group')) {
- register_error(elgg_echo('group:notfound'));
- forward();
- }
- $title = elgg_echo('discussion:reply:edit');
- elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid");
- elgg_push_breadcrumb($topic->title, $topic->getURL());
- elgg_push_breadcrumb($title);
- $params = array(
- 'guid' => $reply->guid,
- 'hidden' => false,
- );
- $content = elgg_view('ajax/discussion/reply/edit', $params);
- }
- $params = array(
- 'content' => $content,
- 'title' => $title,
- 'sidebar' => elgg_view('discussion/sidebar/edit'),
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($title, $body);
- }
- /**
- * View a discussion topic
- *
- * @param int $guid GUID of topic
- */
- function discussion_handle_view_page($guid) {
- // We now have RSS on topics
- global $autofeed;
- $autofeed = true;
- elgg_entity_gatekeeper($guid, 'object', 'groupforumtopic');
- $topic = get_entity($guid);
- $group = $topic->getContainerEntity();
- if (!elgg_instanceof($group, 'group')) {
- register_error(elgg_echo('group:notfound'));
- forward();
- }
- elgg_load_js('elgg.discussion');
- elgg_set_page_owner_guid($group->getGUID());
- elgg_group_gatekeeper();
- elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid");
- elgg_push_breadcrumb($topic->title);
- $params = array(
- 'topic' => $topic,
- 'show_add_form' => false,
- );
- $content = elgg_view_entity($topic, array('full_view' => true));
- if ($topic->status == 'closed') {
- $content .= elgg_view('discussion/replies', $params);
- $content .= elgg_view('discussion/closed');
- } elseif ($group->canWriteToContainer(0, 'object', 'groupforumtopic') || elgg_is_admin_logged_in()) {
- $params['show_add_form'] = true;
- $content .= elgg_view('discussion/replies', $params);
- } else {
- $content .= elgg_view('discussion/replies', $params);
- }
- $params = array(
- 'content' => $content,
- 'title' => $topic->title,
- 'sidebar' => elgg_view('discussion/sidebar'),
- 'filter' => '',
- );
- $body = elgg_view_layout('content', $params);
- echo elgg_view_page($topic->title, $body);
- }
- /**
- * Prepare discussion topic form variables
- *
- * @param ElggObject $topic Topic object if editing
- * @return array
- */
- function discussion_prepare_form_vars($topic = NULL) {
- // input names => defaults
- $values = array(
- 'title' => '',
- 'description' => '',
- 'status' => '',
- 'access_id' => ACCESS_DEFAULT,
- 'tags' => '',
- 'container_guid' => elgg_get_page_owner_guid(),
- 'guid' => null,
- 'topic' => $topic,
- );
- if ($topic) {
- foreach (array_keys($values) as $field) {
- if (isset($topic->$field)) {
- $values[$field] = $topic->$field;
- }
- }
- }
- if (elgg_is_sticky_form('topic')) {
- $sticky_values = elgg_get_sticky_values('topic');
- foreach ($sticky_values as $key => $value) {
- $values[$key] = $value;
- }
- }
- elgg_clear_sticky_form('topic');
- return $values;
- }
|