00001 <?php
00056 global $CURRENT_SYSTEM_VIEWTYPE;
00057 $CURRENT_SYSTEM_VIEWTYPE = "";
00058
00073 function elgg_set_viewtype($viewtype = "") {
00074 global $CURRENT_SYSTEM_VIEWTYPE;
00075
00076 $CURRENT_SYSTEM_VIEWTYPE = $viewtype;
00077
00078 return true;
00079 }
00080
00097 function elgg_get_viewtype() {
00098 global $CURRENT_SYSTEM_VIEWTYPE, $CONFIG;
00099
00100 if ($CURRENT_SYSTEM_VIEWTYPE != "") {
00101 return $CURRENT_SYSTEM_VIEWTYPE;
00102 }
00103
00104 $viewtype = get_input('view', '', false);
00105 if (is_string($viewtype) && $viewtype !== '') {
00106
00107 if (!preg_match('/\W/', $viewtype)) {
00108 return $viewtype;
00109 }
00110 }
00111
00112 if (!empty($CONFIG->view)) {
00113 return $CONFIG->view;
00114 }
00115
00116 return 'default';
00117 }
00118
00125 function elgg_register_viewtype($view_type) {
00126 global $CONFIG;
00127
00128 if (!isset($CONFIG->view_types) || !is_array($CONFIG->view_types)) {
00129 $CONFIG->view_types = array();
00130 }
00131
00132 if (!in_array($view_type, $CONFIG->view_types)) {
00133 $CONFIG->view_types[] = $view_type;
00134 }
00135
00136 return true;
00137 }
00138
00148 function elgg_is_valid_view_type($view_type) {
00149 global $CONFIG;
00150
00151 if (!isset($CONFIG->view_types) || !is_array($CONFIG->view_types)) {
00152 return FALSE;
00153 }
00154
00155 return in_array($view_type, $CONFIG->view_types);
00156 }
00157
00170 function elgg_register_viewtype_fallback($viewtype) {
00171 global $CONFIG;
00172
00173 if (!isset($CONFIG->viewtype)) {
00174 $CONFIG->viewtype = new stdClass;
00175 }
00176
00177 if (!isset($CONFIG->viewtype->fallback)) {
00178 $CONFIG->viewtype->fallback = array();
00179 }
00180
00181 $CONFIG->viewtype->fallback[] = $viewtype;
00182 }
00183
00192 function elgg_does_viewtype_fallback($viewtype) {
00193 global $CONFIG;
00194
00195 if (isset($CONFIG->viewtype) && isset($CONFIG->viewtype->fallback)) {
00196 return in_array($viewtype, $CONFIG->viewtype->fallback);
00197 }
00198
00199 return FALSE;
00200 }
00201
00209 function elgg_register_ajax_view($view) {
00210 global $CONFIG;
00211
00212 if (!isset($CONFIG->allowed_ajax_views)) {
00213 $CONFIG->allowed_ajax_views = array();
00214 }
00215
00216 $CONFIG->allowed_ajax_views[$view] = true;
00217 }
00218
00226 function elgg_unregister_ajax_view($view) {
00227 global $CONFIG;
00228
00229 if (isset($CONFIG->allowed_ajax_views[$view])) {
00230 unset($CONFIG->allowed_ajax_views[$view]);
00231 }
00232 }
00233
00245 function elgg_get_view_location($view, $viewtype = '') {
00246 global $CONFIG;
00247
00248 if (empty($viewtype)) {
00249 $viewtype = elgg_get_viewtype();
00250 }
00251
00252 if (!isset($CONFIG->views->locations[$viewtype][$view])) {
00253 if (!isset($CONFIG->viewpath)) {
00254 return dirname(dirname(dirname(__FILE__))) . "/views/";
00255 } else {
00256 return $CONFIG->viewpath;
00257 }
00258 } else {
00259 return $CONFIG->views->locations[$viewtype][$view];
00260 }
00261 }
00262
00279 function elgg_set_view_location($view, $location, $viewtype = '') {
00280 global $CONFIG;
00281
00282 if (empty($viewtype)) {
00283 $viewtype = 'default';
00284 }
00285
00286 if (!isset($CONFIG->views)) {
00287 $CONFIG->views = new stdClass;
00288 }
00289
00290 if (!isset($CONFIG->views->locations)) {
00291 $CONFIG->views->locations = array($viewtype => array($view => $location));
00292
00293 } else if (!isset($CONFIG->views->locations[$viewtype])) {
00294 $CONFIG->views->locations[$viewtype] = array($view => $location);
00295
00296 } else {
00297 $CONFIG->views->locations[$viewtype][$view] = $location;
00298 }
00299 }
00300
00312 function elgg_view_exists($view, $viewtype = '', $recurse = true) {
00313 global $CONFIG;
00314
00315
00316 if (empty($viewtype)) {
00317 $viewtype = elgg_get_viewtype();
00318 }
00319
00320 if (!isset($CONFIG->views->locations[$viewtype][$view])) {
00321 if (!isset($CONFIG->viewpath)) {
00322 $location = dirname(dirname(dirname(__FILE__))) . "/views/";
00323 } else {
00324 $location = $CONFIG->viewpath;
00325 }
00326 } else {
00327 $location = $CONFIG->views->locations[$viewtype][$view];
00328 }
00329
00330 if (file_exists("{$location}{$viewtype}/{$view}.php")) {
00331 return true;
00332 }
00333
00334
00335
00336 if ($recurse && isset($CONFIG->views->extensions[$view])) {
00337 foreach ($CONFIG->views->extensions[$view] as $view_extension) {
00338
00339 if (elgg_view_exists($view_extension, $viewtype, false)) {
00340 return true;
00341 }
00342 }
00343 }
00344
00345
00346 if ($viewtype != 'default' && elgg_does_viewtype_fallback($viewtype)) {
00347 return elgg_view_exists($view, 'default');
00348 }
00349
00350 return false;
00351 }
00352
00388 function elgg_view($view, $vars = array(), $bypass = false, $ignored = false, $viewtype = '') {
00389 global $CONFIG;
00390
00391 if (!is_string($view) || !is_string($viewtype)) {
00392 elgg_log("View and Viewtype in views must be a strings: $view", 'NOTICE');
00393 return '';
00394 }
00395
00396 if (strpos($view, '..') !== false) {
00397 return '';
00398 }
00399
00400 if (!is_array($vars)) {
00401 elgg_log("Vars in views must be an array: $view", 'ERROR');
00402 $vars = array();
00403 }
00404
00405
00406 if ($viewtype === '') {
00407 $viewtype = elgg_get_viewtype();
00408 } elseif (preg_match('/\W/', $viewtype)) {
00409
00410 return '';
00411 }
00412
00413 $view_orig = $view;
00414
00415
00416 if (!isset($CONFIG->pagesetupdone) && $CONFIG->boot_complete) {
00417 $CONFIG->pagesetupdone = true;
00418 elgg_trigger_event('pagesetup', 'system');
00419 }
00420
00421
00422
00423
00424 if (!isset($vars['user'])) {
00425 $vars['user'] = elgg_get_logged_in_user_entity();
00426 }
00427 if (!isset($vars['config'])) {
00428 $vars['config'] = $CONFIG;
00429 }
00430 if (!isset($vars['url'])) {
00431 $vars['url'] = elgg_get_site_url();
00432 }
00433
00434
00435
00436
00437 if (isset($vars['full']) && !isset($vars['full_view'])) {
00438 elgg_deprecated_notice("Use \$vars['full_view'] instead of \$vars['full']", 1.8, 2);
00439 $vars['full_view'] = $vars['full'];
00440 }
00441 if (isset($vars['full_view'])) {
00442 $vars['full'] = $vars['full_view'];
00443 }
00444
00445
00446 if (isset($vars['internalname']) && !isset($vars['__ignoreInternalname']) && !isset($vars['name'])) {
00447 elgg_deprecated_notice('You should pass $vars[\'name\'] now instead of $vars[\'internalname\']', 1.8, 2);
00448 $vars['name'] = $vars['internalname'];
00449 } elseif (isset($vars['name'])) {
00450 if (!isset($vars['internalname'])) {
00451 $vars['__ignoreInternalname'] = '';
00452 }
00453 $vars['internalname'] = $vars['name'];
00454 }
00455
00456
00457 if (isset($vars['internalid']) && !isset($vars['__ignoreInternalid']) && !isset($vars['name'])) {
00458 elgg_deprecated_notice('You should pass $vars[\'id\'] now instead of $vars[\'internalid\']', 1.8, 2);
00459 $vars['id'] = $vars['internalid'];
00460 } elseif (isset($vars['id'])) {
00461 if (!isset($vars['internalid'])) {
00462 $vars['__ignoreInternalid'] = '';
00463 }
00464 $vars['internalid'] = $vars['id'];
00465 }
00466
00467
00468 if ($bypass == false && isset($CONFIG->template_handler) && !empty($CONFIG->template_handler)) {
00469 $template_handler = $CONFIG->template_handler;
00470 if (is_callable($template_handler)) {
00471 return call_user_func($template_handler, $view, $vars);
00472 }
00473 }
00474
00475
00476 if (isset($CONFIG->views->extensions[$view])) {
00477 $viewlist = $CONFIG->views->extensions[$view];
00478 } else {
00479 $viewlist = array(500 => $view);
00480 }
00481
00482
00483 ob_start();
00484
00485 foreach ($viewlist as $priority => $view) {
00486
00487 $view_location = elgg_get_view_location($view, $viewtype);
00488 $view_file = "$view_location$viewtype/$view.php";
00489
00490
00491 if (!file_exists($view_file) || !include($view_file)) {
00492
00493 $error = "$viewtype/$view view does not exist.";
00494
00495
00496 if ($viewtype !== 'default' && elgg_does_viewtype_fallback($viewtype)) {
00497
00498 $default_location = elgg_get_view_location($view, 'default');
00499 $default_view_file = "{$default_location}default/$view.php";
00500
00501 if (file_exists($default_view_file) && include($default_view_file)) {
00502
00503 $error .= " Using default/$view instead.";
00504 } else {
00505
00506 $error = "Neither $viewtype/$view nor default/$view view exists.";
00507 }
00508 }
00509
00510
00511 elgg_log($error, 'NOTICE');
00512 }
00513 }
00514
00515
00516 $content = ob_get_clean();
00517
00518
00519 $params = array('view' => $view_orig, 'vars' => $vars, 'viewtype' => $viewtype);
00520 $content = elgg_trigger_plugin_hook('view', $view_orig, $params, $content);
00521
00522
00523 $content_tmp = elgg_trigger_plugin_hook('display', 'view', $params, $content);
00524
00525 if ($content_tmp !== $content) {
00526 $content = $content_tmp;
00527 elgg_deprecated_notice('The display:view plugin hook is deprecated by view:view_name', 1.8);
00528 }
00529
00530 return $content;
00531 }
00532
00557 function elgg_extend_view($view, $view_extension, $priority = 501) {
00558 global $CONFIG;
00559
00560 if (!isset($CONFIG->views)) {
00561 $CONFIG->views = (object) array(
00562 'extensions' => array(),
00563 );
00564 $CONFIG->views->extensions[$view][500] = (string)$view;
00565 } else {
00566 if (!isset($CONFIG->views->extensions[$view])) {
00567 $CONFIG->views->extensions[$view][500] = (string)$view;
00568 }
00569 }
00570
00571
00572 while (isset($CONFIG->views->extensions[$view][$priority])) {
00573 $priority++;
00574 }
00575
00576 $CONFIG->views->extensions[$view][$priority] = (string)$view_extension;
00577 ksort($CONFIG->views->extensions[$view]);
00578 }
00579
00589 function elgg_unextend_view($view, $view_extension) {
00590 global $CONFIG;
00591
00592 if (!isset($CONFIG->views->extensions[$view])) {
00593 return FALSE;
00594 }
00595
00596 $priority = array_search($view_extension, $CONFIG->views->extensions[$view]);
00597 if ($priority === FALSE) {
00598 return FALSE;
00599 }
00600
00601 unset($CONFIG->views->extensions[$view][$priority]);
00602
00603 return TRUE;
00604 }
00605
00622 function elgg_view_page($title, $body, $page_shell = 'default', $vars = array()) {
00623
00624 $messages = null;
00625 if (count_messages()) {
00626
00627 $messages = system_messages(NULL, "error");
00628 if (count($messages["error"]) == 0) {
00629
00630 $messages = system_messages(null, "");
00631 } else {
00632
00633 system_messages(null, "");
00634 }
00635 }
00636
00637 $vars['title'] = $title;
00638 $vars['body'] = $body;
00639 $vars['sysmessages'] = $messages;
00640
00641 $vars = elgg_trigger_plugin_hook('output:before', 'page', null, $vars);
00642
00643
00644 if ($page_shell == 'default' && elgg_view_exists('pageshells/pageshell')) {
00645 elgg_deprecated_notice("pageshells/pageshell is deprecated by page/$page_shell", 1.8);
00646 $output = elgg_view('pageshells/pageshell', $vars);
00647 } else {
00648 $output = elgg_view("page/$page_shell", $vars);
00649 }
00650
00651 $vars['page_shell'] = $page_shell;
00652
00653
00654 return elgg_trigger_plugin_hook('output', 'page', $vars, $output);
00655 }
00656
00689 function elgg_view_layout($layout_name, $vars = array()) {
00690
00691 if (is_string($vars) || $vars === null) {
00692 elgg_deprecated_notice("The use of unlimited optional string arguments in elgg_view_layout() was deprecated in favor of an options array", 1.8);
00693 $arg = 1;
00694 $param_array = array();
00695 while ($arg < func_num_args()) {
00696 $param_array['area' . $arg] = func_get_arg($arg);
00697 $arg++;
00698 }
00699 } else {
00700 $param_array = $vars;
00701 }
00702
00703 $params = elgg_trigger_plugin_hook('output:before', 'layout', null, $param_array);
00704
00705
00706 if (elgg_view_exists("canvas/layouts/$layout_name")) {
00707 elgg_deprecated_notice("canvas/layouts/$layout_name is deprecated by page/layouts/$layout_name", 1.8);
00708 $output = elgg_view("canvas/layouts/$layout_name", $params);
00709 } elseif (elgg_view_exists("page/layouts/$layout_name")) {
00710 $output = elgg_view("page/layouts/$layout_name", $params);
00711 } else {
00712 $output = elgg_view("page/layouts/default", $params);
00713 }
00714
00715 return elgg_trigger_plugin_hook('output:after', 'layout', $params, $output);
00716 }
00717
00752 function elgg_view_menu($menu_name, array $vars = array()) {
00753 global $CONFIG;
00754
00755 $vars['name'] = $menu_name;
00756
00757 $sort_by = elgg_extract('sort_by', $vars, 'text');
00758
00759 if (isset($CONFIG->menus[$menu_name])) {
00760 $menu = $CONFIG->menus[$menu_name];
00761 } else {
00762 $menu = array();
00763 }
00764
00765
00766
00767 $menu = elgg_trigger_plugin_hook('register', "menu:$menu_name", $vars, $menu);
00768
00769 $builder = new ElggMenuBuilder($menu);
00770 $vars['menu'] = $builder->getMenu($sort_by);
00771 $vars['selected_item'] = $builder->getSelected();
00772
00773
00774 $vars['menu'] = elgg_trigger_plugin_hook('prepare', "menu:$menu_name", $vars, $vars['menu']);
00775
00776 if (elgg_view_exists("navigation/menu/$menu_name")) {
00777 return elgg_view("navigation/menu/$menu_name", $vars);
00778 } else {
00779 return elgg_view("navigation/menu/default", $vars);
00780 }
00781 }
00782
00813 function elgg_view_entity(ElggEntity $entity, $vars = array(), $bypass = true, $debug = false) {
00814
00815
00816 if (!$entity || !($entity instanceof ElggEntity)) {
00817 return false;
00818 }
00819
00820 global $autofeed;
00821 $autofeed = true;
00822
00823 $defaults = array(
00824 'full_view' => false,
00825 );
00826
00827 if (is_array($vars)) {
00828 $vars = array_merge($defaults, $vars);
00829 } else {
00830 elgg_deprecated_notice("Update your use of elgg_view_entity()", 1.8);
00831 $vars = array(
00832 'full_view' => $vars,
00833 );
00834 }
00835
00836 $vars['entity'] = $entity;
00837
00838
00839
00840 $view = $entity->view;
00841 if (is_string($view)) {
00842 return elgg_view($view, $vars, $bypass, $debug);
00843 }
00844
00845 $entity_type = $entity->getType();
00846
00847 $subtype = $entity->getSubtype();
00848 if (empty($subtype)) {
00849 $subtype = 'default';
00850 }
00851
00852 $contents = '';
00853 if (elgg_view_exists("$entity_type/$subtype")) {
00854 $contents = elgg_view("$entity_type/$subtype", $vars, $bypass, $debug);
00855 }
00856 if (empty($contents)) {
00857 $contents = elgg_view("$entity_type/default", $vars, $bypass, $debug);
00858 }
00859
00860
00861 if ($vars['full_view']) {
00862 $annotations = elgg_view_entity_annotations($entity, $vars['full_view']);
00863
00864 if ($annotations) {
00865 $contents .= $annotations;
00866 }
00867 }
00868 return $contents;
00869 }
00870
00886 function elgg_view_entity_icon(ElggEntity $entity, $size = 'medium', $vars = array()) {
00887
00888
00889 if (!$entity || !($entity instanceof ElggEntity)) {
00890 return false;
00891 }
00892
00893 $vars['entity'] = $entity;
00894 $vars['size'] = $size;
00895
00896 $entity_type = $entity->getType();
00897
00898 $subtype = $entity->getSubtype();
00899 if (empty($subtype)) {
00900 $subtype = 'default';
00901 }
00902
00903 $contents = '';
00904 if (elgg_view_exists("icon/$entity_type/$subtype")) {
00905 $contents = elgg_view("icon/$entity_type/$subtype", $vars);
00906 }
00907 if (empty($contents)) {
00908 $contents = elgg_view("icon/$entity_type/default", $vars);
00909 }
00910 if (empty($contents)) {
00911 $contents = elgg_view("icon/default", $vars);
00912 }
00913
00914 return $contents;
00915 }
00916
00937 function elgg_view_annotation(ElggAnnotation $annotation, array $vars = array(), $bypass = true, $debug = false) {
00938 global $autofeed;
00939 $autofeed = true;
00940
00941 $defaults = array(
00942 'full_view' => true,
00943 );
00944
00945 $vars = array_merge($defaults, $vars);
00946 $vars['annotation'] = $annotation;
00947
00948
00949
00950 $view = $annotation->view;
00951 if (is_string($view)) {
00952 return elgg_view($view, $vars, $bypass, $debug);
00953 }
00954
00955 $name = $annotation->name;
00956 if (empty($name)) {
00957 return false;
00958 }
00959
00960 if (elgg_view_exists("annotation/$name")) {
00961 return elgg_view("annotation/$name", $vars, $bypass, $debug);
00962 } else {
00963 return elgg_view("annotation/default", $vars, $bypass, $debug);
00964 }
00965 }
00966
00992 function elgg_view_entity_list($entities, $vars = array(), $offset = 0, $limit = 10, $full_view = true,
00993 $list_type_toggle = true, $pagination = true) {
00994
00995 if (!is_int($offset)) {
00996 $offset = (int)get_input('offset', 0);
00997 }
00998
00999
01000 $list_type = get_input('list_type', 'list');
01001 if (get_input('listtype')) {
01002 elgg_deprecated_notice("'listtype' has been deprecated by 'list_type' for lists", 1.8);
01003 $list_type = get_input('listtype');
01004 }
01005
01006 if (is_array($vars)) {
01007
01008 $defaults = array(
01009 'items' => $entities,
01010 'list_class' => 'elgg-list-entity',
01011 'full_view' => true,
01012 'pagination' => true,
01013 'list_type' => $list_type,
01014 'list_type_toggle' => false,
01015 'offset' => $offset,
01016 );
01017
01018 $vars = array_merge($defaults, $vars);
01019
01020 } else {
01021
01022 elgg_deprecated_notice("Please update your use of elgg_view_entity_list()", 1.8);
01023
01024 $vars = array(
01025 'items' => $entities,
01026 'count' => (int) $vars,
01027 'offset' => $offset,
01028 'limit' => (int) $limit,
01029 'full_view' => $full_view,
01030 'pagination' => $pagination,
01031 'list_type' => $list_type,
01032 'list_type_toggle' => $list_type_toggle,
01033 'list_class' => 'elgg-list-entity',
01034 );
01035 }
01036
01037 if ($vars['list_type'] != 'list') {
01038 return elgg_view('page/components/gallery', $vars);
01039 } else {
01040 return elgg_view('page/components/list', $vars);
01041 }
01042 }
01043
01060 function elgg_view_annotation_list($annotations, array $vars = array()) {
01061 $defaults = array(
01062 'items' => $annotations,
01063 'list_class' => 'elgg-list-annotation elgg-annotation-list',
01064 'full_view' => true,
01065 'offset_key' => 'annoff',
01066 );
01067
01068 $vars = array_merge($defaults, $vars);
01069
01070 return elgg_view('page/components/list', $vars);
01071 }
01072
01087 function elgg_view_entity_annotations(ElggEntity $entity, $full_view = true) {
01088 if (!($entity instanceof ElggEntity)) {
01089 return false;
01090 }
01091
01092 $entity_type = $entity->getType();
01093
01094 $annotations = elgg_trigger_plugin_hook('entity:annotate', $entity_type,
01095 array(
01096 'entity' => $entity,
01097 'full_view' => $full_view,
01098 )
01099 );
01100
01101 return $annotations;
01102 }
01103
01114 function elgg_view_title($title, $vars = array()) {
01115 if (!is_array($vars)) {
01116 elgg_deprecated_notice('setting $submenu in elgg_view_title() is deprecated', 1.8);
01117 $vars = array('submenu' => $vars);
01118 }
01119
01120 $vars['title'] = $title;
01121
01122 return elgg_view('page/elements/title', $vars);
01123 }
01124
01135 function elgg_view_friendly_time($time) {
01136 return elgg_view('output/friendlytime', array('time' => $time));
01137 }
01138
01139
01155 function elgg_view_comments($entity, $add_comment = true, array $vars = array()) {
01156 if (!($entity instanceof ElggEntity)) {
01157 return false;
01158 }
01159
01160 $vars['entity'] = $entity;
01161 $vars['show_add_form'] = $add_comment;
01162 $vars['class'] = elgg_extract('class', $vars, "{$entity->getSubtype()}-comments");
01163
01164 $output = elgg_trigger_plugin_hook('comments', $entity->getType(), $vars, false);
01165 if ($output) {
01166 return $output;
01167 } else {
01168 return elgg_view('page/elements/comments', $vars);
01169 }
01170 }
01171
01187 function elgg_view_image_block($image, $body, $vars = array()) {
01188 $vars['image'] = $image;
01189 $vars['body'] = $body;
01190 return elgg_view('page/components/image_block', $vars);
01191 }
01192
01208 function elgg_view_module($type, $title, $body, array $vars = array()) {
01209 $vars['class'] = elgg_extract('class', $vars, '') . " elgg-module-$type";
01210 $vars['title'] = $title;
01211 $vars['body'] = $body;
01212 return elgg_view('page/components/module', $vars);
01213 }
01214
01223 function elgg_view_river_item($item, array $vars = array()) {
01224 if (!($item instanceof ElggRiverItem)) {
01225 return '';
01226 }
01227
01228 $view = $item->getView();
01229 if (!$view || !elgg_view_exists($view, 'default')) {
01230 return '';
01231 }
01232
01233 $subject = $item->getSubjectEntity();
01234 $object = $item->getObjectEntity();
01235 if (!$subject || !$object) {
01236
01237 return '';
01238 }
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251 $vars['item'] = $item;
01252
01253 return elgg_view('river/item', $vars);
01254 }
01255
01290 function elgg_view_form($action, $form_vars = array(), $body_vars = array()) {
01291 global $CONFIG;
01292
01293 $defaults = array(
01294 'action' => $CONFIG->wwwroot . "action/$action",
01295 'body' => elgg_view("forms/$action", $body_vars)
01296 );
01297
01298 $form_class = 'elgg-form-' . preg_replace('/[^a-z0-9]/i', '-', $action);
01299
01300
01301 if (isset($form_vars['class'])) {
01302 $form_vars['class'] = $form_vars['class'] . " $form_class";
01303 } else {
01304 $form_vars['class'] = $form_class;
01305 }
01306
01307 return elgg_view('input/form', array_merge($defaults, $form_vars));
01308 }
01309
01320 function elgg_view_list_item($item, array $vars = array()) {
01321 global $CONFIG;
01322
01323 $type = $item->getType();
01324 if (in_array($type, $CONFIG->entity_types)) {
01325 return elgg_view_entity($item, $vars);
01326 } else if ($type == 'annotation') {
01327 return elgg_view_annotation($item, $vars);
01328 } else if ($type == 'river') {
01329 return elgg_view_river_item($item, $vars);
01330 }
01331
01332 return '';
01333 }
01334
01345 function elgg_view_icon($name, $class = '') {
01346
01347 if ($class === true) {
01348 $class = 'float';
01349 }
01350 return "<span class=\"elgg-icon elgg-icon-$name $class\"></span>";
01351 }
01352
01362 function elgg_view_access_collections($owner_guid) {
01363 if ($collections = get_user_access_collections($owner_guid)) {
01364 foreach ($collections as $key => $collection) {
01365 $collections[$key]->members = get_members_of_access_collection($collection->id, true);
01366 $collections[$key]->entities = get_user_friends($owner_guid, "", 9999);
01367 }
01368 }
01369
01370 return elgg_view('core/friends/collections', array('collections' => $collections));
01371 }
01372
01394 function set_template_handler($function_name) {
01395 global $CONFIG;
01396
01397 if (is_callable($function_name)) {
01398 $CONFIG->template_handler = $function_name;
01399 return true;
01400 }
01401 return false;
01402 }
01403
01418 function elgg_get_views($dir, $base) {
01419 $return = array();
01420 if (file_exists($dir) && is_dir($dir)) {
01421 if ($handle = opendir($dir)) {
01422 while ($view = readdir($handle)) {
01423 if (!in_array($view, array('.', '..', '.svn', 'CVS'))) {
01424 if (is_dir($dir . '/' . $view)) {
01425 if ($val = elgg_get_views($dir . '/' . $view, $base . '/' . $view)) {
01426 $return = array_merge($return, $val);
01427 }
01428 } else {
01429 $view = str_replace('.php', '', $view);
01430 $return[] = $base . '/' . $view;
01431 }
01432 }
01433 }
01434 }
01435 }
01436
01437 return $return;
01438 }
01439
01454 function elgg_view_tree($view_root, $viewtype = "") {
01455 global $CONFIG;
01456 static $treecache = array();
01457
01458
01459 if (!$viewtype) {
01460 $viewtype = elgg_get_viewtype();
01461 }
01462
01463
01464 if (!empty($treecache[$view_root])) {
01465 return $treecache[$view_root];
01466 }
01467
01468
01469 if (isset($CONFIG->views->locations[$viewtype])) {
01470 foreach ($CONFIG->views->locations[$viewtype] as $view => $path) {
01471 $pos = strpos($view, $view_root);
01472 if ($pos === 0) {
01473 $treecache[$view_root][] = $view;
01474 }
01475 }
01476 }
01477
01478
01479 $location = $CONFIG->viewpath;
01480 $viewtype = elgg_get_viewtype();
01481 $root = $location . $viewtype . '/' . $view_root;
01482
01483 if (file_exists($root) && is_dir($root)) {
01484 $val = elgg_get_views($root, $view_root);
01485 if (!is_array($treecache[$view_root])) {
01486 $treecache[$view_root] = array();
01487 }
01488 $treecache[$view_root] = array_merge($treecache[$view_root], $val);
01489 }
01490
01491 return $treecache[$view_root];
01492 }
01493
01512 function autoregister_views($view_base, $folder, $base_location_path, $viewtype) {
01513 if ($handle = opendir($folder)) {
01514 while ($view = readdir($handle)) {
01515 if (!in_array($view, array('.', '..', '.svn', 'CVS')) && !is_dir($folder . "/" . $view)) {
01516
01517
01518 if ((substr_count($view, ".php") > 0) || (substr_count($view, ".png") > 0)) {
01519 if (!empty($view_base)) {
01520 $view_base_new = $view_base . "/";
01521 } else {
01522 $view_base_new = "";
01523 }
01524
01525 elgg_set_view_location($view_base_new . str_replace('.php', '', $view),
01526 $base_location_path, $viewtype);
01527 }
01528 } else if (!in_array($view, array('.', '..', '.svn', 'CVS')) && is_dir($folder . "/" . $view)) {
01529 if (!empty($view_base)) {
01530 $view_base_new = $view_base . "/";
01531 } else {
01532 $view_base_new = "";
01533 }
01534 autoregister_views($view_base_new . $view, $folder . "/" . $view,
01535 $base_location_path, $viewtype);
01536 }
01537 }
01538 return TRUE;
01539 }
01540
01541 return FALSE;
01542 }
01543
01550 function elgg_views_add_rss_link() {
01551 global $autofeed;
01552 if (isset($autofeed) && $autofeed == true) {
01553 $url = full_url();
01554 if (substr_count($url, '?')) {
01555 $url .= "&view=rss";
01556 } else {
01557 $url .= "?view=rss";
01558 }
01559
01560 $url = elgg_format_url($url);
01561 elgg_register_menu_item('extras', array(
01562 'name' => 'rss',
01563 'text' => elgg_view_icon('rss'),
01564 'href' => $url,
01565 'title' => elgg_echo('feed:rss'),
01566 ));
01567 }
01568 }
01569
01576 function elgg_views_handle_deprecated_views() {
01577 $location = elgg_get_view_location('page_elements/contentwrapper');
01578 if ($location === "/var/www/views/") {
01579 elgg_extend_view('page_elements/contentwrapper', 'page/elements/wrapper');
01580 }
01581 }
01582
01591 function elgg_views_boot() {
01592 global $CONFIG;
01593
01594 elgg_register_simplecache_view('css/ie');
01595 elgg_register_simplecache_view('css/ie6');
01596 elgg_register_simplecache_view('css/ie7');
01597
01598 elgg_register_js('jquery', '/vendors/jquery/jquery-1.6.4.min.js', 'head');
01599 elgg_register_js('jquery-ui', '/vendors/jquery/jquery-ui-1.8.16.min.js', 'head');
01600 elgg_register_js('jquery.form', '/vendors/jquery/jquery.form.js');
01601
01602 elgg_register_simplecache_view('js/elgg');
01603 $elgg_js_url = elgg_get_simplecache_url('js', 'elgg');
01604 elgg_register_js('elgg', $elgg_js_url, 'head');
01605
01606 elgg_load_js('jquery');
01607 elgg_load_js('jquery-ui');
01608 elgg_load_js('elgg');
01609
01610 elgg_register_simplecache_view('js/lightbox');
01611 $lightbox_js_url = elgg_get_simplecache_url('js', 'lightbox');
01612 elgg_register_js('lightbox', $lightbox_js_url);
01613
01614 elgg_register_simplecache_view('css/lightbox');
01615 $lightbox_css_url = elgg_get_simplecache_url('css', 'lightbox');
01616 elgg_register_css('lightbox', $lightbox_css_url);
01617
01618 elgg_register_simplecache_view('css/elgg');
01619 $elgg_css_url = elgg_get_simplecache_url('css', 'elgg');
01620 elgg_register_css('elgg', $elgg_css_url);
01621
01622 elgg_load_css('elgg');
01623
01624 elgg_register_ajax_view('js/languages');
01625
01626 elgg_register_plugin_hook_handler('output:before', 'layout', 'elgg_views_add_rss_link');
01627
01628
01629
01630 $view_path = $CONFIG->viewpath;
01631
01632 $views = scandir($view_path);
01633
01634 foreach ($views as $view) {
01635 if ($view[0] !== '.' && is_dir($view_path . $view)) {
01636 elgg_register_viewtype($view);
01637 }
01638 }
01639
01640
01641 if (!$CONFIG->icon_sizes) {
01642 $icon_sizes = array(
01643 'topbar' => array('w' => 16, 'h' => 16, 'square' => TRUE, 'upscale' => TRUE),
01644 'tiny' => array('w' => 25, 'h' => 25, 'square' => TRUE, 'upscale' => TRUE),
01645 'small' => array('w' => 40, 'h' => 40, 'square' => TRUE, 'upscale' => TRUE),
01646 'medium' => array('w' => 100, 'h' => 100, 'square' => TRUE, 'upscale' => TRUE),
01647 'large' => array('w' => 200, 'h' => 200, 'square' => FALSE, 'upscale' => FALSE),
01648 'master' => array('w' => 550, 'h' => 550, 'square' => FALSE, 'upscale' => FALSE),
01649 );
01650 elgg_set_config('icon_sizes', $icon_sizes);
01651 }
01652 }
01653
01654 elgg_register_event_handler('boot', 'system', 'elgg_views_boot');
01655 elgg_register_event_handler('init', 'system', 'elgg_views_handle_deprecated_views');