Elgg  Version master
views.php
Go to the documentation of this file.
1 <?php
44 use Elgg\Exceptions\InvalidArgumentException as ElggInvalidArgumentException;
45 use Elgg\Menu\Menu;
47 
60 function elgg_set_viewtype(string $viewtype = ''): bool {
61  return _elgg_services()->views->setViewtype($viewtype);
62 }
63 
73 function elgg_get_viewtype(): string {
74  return _elgg_services()->views->getViewtype();
75 }
76 
89  _elgg_services()->views->registerViewtypeFallback($viewtype);
90 }
91 
104 function elgg_register_ajax_view(string $view): void {
105  _elgg_services()->ajax->registerView($view);
106 }
107 
116 function elgg_unregister_ajax_view(string $view): void {
117  _elgg_services()->ajax->unregisterView($view);
118 }
119 
131 function elgg_view_exists(string $view, string $viewtype = '', bool $recurse = true): bool {
132  return _elgg_services()->views->viewExists($view, $viewtype, $recurse);
133 }
134 
156 function elgg_view(string $view, array $vars = [], string $viewtype = ''): string {
157  return _elgg_services()->views->renderView($view, $vars, $viewtype);
158 }
159 
183 function elgg_extend_view(string $view, string $view_extension, int $priority = 501): void {
184  _elgg_services()->views->extendView($view, $view_extension, $priority);
185 }
186 
196 function elgg_unextend_view(string $view, string $view_extension): bool {
197  return _elgg_services()->views->unextendView($view, $view_extension);
198 }
199 
210 function elgg_get_view_extensions(string $view): array {
211  $list = _elgg_services()->views->getViewList($view);
212  unset($list[500]);
213  return $list;
214 }
215 
237 function elgg_view_page(string $title, string|array $body, string $page_shell = 'default', array $vars = []): string {
238 
239  if (elgg_is_xhr() && get_input('_elgg_ajax_list')) {
240  // requested by ajaxed pagination
241  return is_array($body) ? (string) elgg_extract('content', $body) : $body;
242  }
243 
244  if (is_array($body)) {
245  $vars['entity'] = elgg_extract('entity', $body, elgg_extract('entity', $vars));
246 
247  $body['title'] = elgg_extract('title', $body, $title);
248  $body = elgg_view_layout('default', $body);
249  }
250 
251  $timer = _elgg_services()->timer;
252  if (!$timer->hasEnded(['build page'])) {
253  $timer->end(['build page']);
254  }
255 
256  $timer->begin([__FUNCTION__]);
257 
258  $params = [];
259  $params['identifier'] = _elgg_services()->request->getFirstUrlSegment();
260  $params['segments'] = _elgg_services()->request->getUrlSegments();
261  array_shift($params['segments']);
262 
263  $page_shell = elgg_trigger_event_results('shell', 'page', $params, $page_shell);
264  if ($page_shell === 'walled_garden') {
265  if (!elgg_get_config('walled_garden') || elgg_is_logged_in()) {
266  $page_shell = 'default';
267  }
268  }
269 
270  $system_messages = _elgg_services()->system_messages;
271 
272  $messages = null;
273  if ($system_messages->count()) {
274  $messages = $system_messages->dumpRegister();
275 
276  if (isset($messages['error'])) {
277  // always make sure error is the first type
278  $errors = [
279  'error' => $messages['error']
280  ];
281 
282  unset($messages['error']);
283  $messages = array_merge($errors, $messages);
284  }
285  }
286 
287  $vars['title'] = $title;
288  $vars['body'] = $body;
289  $vars['sysmessages'] = $messages;
290  $vars['page_shell'] = $page_shell;
291 
292  $vars['head'] = elgg_trigger_event_results('head', 'page', $vars, ['metas' => [], 'links' => []]);
293 
294  $vars = elgg_trigger_event_results('output:before', 'page', [], $vars);
295 
296  $output = elgg_view("page/{$page_shell}", $vars);
297 
298  // Allow plugins to modify the output
299  $output = elgg_trigger_event_results('output', 'page', $vars, $output);
300 
301  $timer->end([__FUNCTION__]);
302  return $output;
303 }
304 
315 function elgg_view_resource(string $name, array $vars = []): string {
316  $view = "resources/{$name}";
317 
318  if (elgg_view_exists($view)) {
319  return _elgg_services()->views->renderView($view, $vars);
320  }
321 
322  if (elgg_get_viewtype() !== 'default' && elgg_view_exists($view, 'default')) {
323  return _elgg_services()->views->renderView($view, $vars, 'default');
324  }
325 
326  _elgg_services()->logger->error("The view {$view} is missing.");
327 
328  // only works for default viewtype
329  throw new PageNotFoundException();
330 }
331 
360 function elgg_view_layout(string $layout_name, array $vars = []): string {
361  $timer = _elgg_services()->timer;
362  if (!$timer->hasEnded(['build page'])) {
363  $timer->end(['build page']);
364  }
365 
366  $timer->begin([__FUNCTION__]);
367 
368  $vars['identifier'] = _elgg_services()->request->getFirstUrlSegment();
369  $vars['segments'] = _elgg_services()->request->getUrlSegments();
370  array_shift($vars['segments']);
371 
372  $layout_name = elgg_trigger_event_results('layout', 'page', $vars, $layout_name);
373 
374  $vars['layout'] = $layout_name;
375 
376  $layout_views = [
377  "page/layouts/{$layout_name}",
378  'page/layouts/default',
379  ];
380 
381  $output = '';
382  foreach ($layout_views as $layout_view) {
383  if (elgg_view_exists($layout_view)) {
384  $output = elgg_view($layout_view, $vars);
385  break;
386  }
387  }
388 
389  $timer->end([__FUNCTION__]);
390  return $output;
391 }
392 
449 function elgg_view_menu($menu, array $vars = []): string {
450 
451  $menu_view = (string) elgg_extract('menu_view', $vars);
452  unset($vars['menu_view']);
453 
454  if (is_string($menu)) {
455  $menu = _elgg_services()->menus->getMenu($menu, $vars);
456  } elseif ($menu instanceof UnpreparedMenu) {
457  $menu = _elgg_services()->menus->prepareMenu($menu);
458  }
459 
460  if (!$menu instanceof Menu) {
461  throw new ElggInvalidArgumentException('$menu must be a menu name, a Menu, or UnpreparedMenu');
462  }
463 
464  $name = $menu->getName();
465  $params = $menu->getParams();
466 
467  $views = [
468  $menu_view,
469  "navigation/menu/{$name}",
470  'navigation/menu/default',
471  ];
472 
473  foreach ($views as $view) {
474  if (elgg_view_exists($view)) {
475  return elgg_view($view, $params);
476  }
477  }
478 
479  return '';
480 }
481 
501 function elgg_view_entity(\ElggEntity $entity, array $vars = []): string {
502 
503  $defaults = [
504  'full_view' => true,
505  ];
506 
507  $vars = array_merge($defaults, $vars);
508 
509  if (elgg_extract('register_rss_link', $vars, $vars['full_view'])) {
511  }
512 
513  $vars['entity'] = $entity;
514 
515  $entity_type = $entity->getType();
516  $entity_subtype = $entity->getSubtype();
517 
518  $subview = $vars['full_view'] ? 'full' : 'summary';
519 
520  $entity_views = [
521  (string) elgg_extract('item_view', $vars, ''),
522  "{$entity_type}/{$entity_subtype}/{$subview}",
523  "{$entity_type}/{$entity_subtype}",
524  "{$entity_type}/default",
525  ];
526 
527  $contents = '';
528  foreach ($entity_views as $view) {
529  if (elgg_view_exists($view)) {
531  break;
532  }
533  }
534 
535  return $contents;
536 }
537 
553 function elgg_view_entity_icon(\ElggEntity $entity, string $size = 'medium', array $vars = []): string {
554 
555  $vars['entity'] = $entity;
556  $vars['size'] = $size;
557 
558  $entity_type = $entity->getType();
559 
560  $subtype = $entity->getSubtype();
561 
562  $contents = '';
563  if (elgg_view_exists("icon/{$entity_type}/{$subtype}")) {
564  $contents = elgg_view("icon/{$entity_type}/{$subtype}", $vars);
565  }
566 
567  if (empty($contents) && elgg_view_exists("icon/{$entity_type}/default")) {
568  $contents = elgg_view("icon/{$entity_type}/default", $vars);
569  }
570 
571  if (empty($contents)) {
572  $contents = elgg_view('icon/default', $vars);
573  }
574 
575  return $contents;
576 }
577 
594 function elgg_view_annotation(\ElggAnnotation $annotation, array $vars = []): string {
595  $defaults = [
596  'full_view' => true,
597  ];
598 
599  $vars = array_merge($defaults, $vars);
600  $vars['annotation'] = $annotation;
601 
602  $name = $annotation->name;
603  if (empty($name)) {
604  return '';
605  }
606 
607  $annotation_views = [
608  (string) elgg_extract('item_view', $vars, ''),
609  "annotation/{$name}",
610  'annotation/default',
611  ];
612 
613  foreach ($annotation_views as $view) {
614  if (elgg_view_exists($view)) {
615  return elgg_view($view, $vars);
616  }
617  }
618 
619  return '';
620 }
621 
647 function elgg_view_entity_list(array $entities, array $vars = []): string {
648  $offset = (int) get_input('offset', 0);
649 
650  // list type can be passed as request parameter
651  $list_type = get_input('list_type', 'list');
652 
653  $defaults = [
654  'items' => $entities,
655  'list_class' => 'elgg-list-entity',
656  'full_view' => true,
657  'pagination' => true,
658  'list_type' => $list_type,
659  'offset' => $offset,
660  'limit' => null,
661  ];
662 
663  $vars = array_merge($defaults, $vars);
664 
665  if (!$vars['limit'] && !$vars['offset']) {
666  // no need for pagination if listing is unlimited
667  $vars['pagination'] = false;
668  }
669 
670  $view = "page/components/{$vars['list_type']}";
671  if (!elgg_view_exists($view)) {
672  $view = 'page/components/list';
673  }
674 
675  return elgg_view($view, $vars);
676 }
677 
696 function elgg_view_annotation_list(array $annotations, array $vars = []): string {
697  // list type can be passed as request parameter
698  $list_type = get_input('list_type', 'list');
699 
700  $defaults = [
701  'items' => $annotations,
702  'offset' => null,
703  'limit' => null,
704  'list_class' => 'elgg-list-annotation',
705  'full_view' => true,
706  'list_type' => $list_type,
707  'offset_key' => 'annoff',
708  ];
709 
710  $vars = array_merge($defaults, $vars);
711 
712  if (!$vars['limit'] && !$vars['offset']) {
713  // no need for pagination if listing is unlimited
714  $vars['pagination'] = false;
715  }
716 
717  $view = "page/components/{$vars['list_type']}";
718  if (!elgg_view_exists($view)) {
719  $view = 'page/components/list';
720  }
721 
722  return elgg_view($view, $vars);
723 }
724 
743 function elgg_view_relationship_list(array $relationships, array $vars = []): string {
744  // list type can be passed as request parameter
745  $list_type = get_input('list_type', 'list');
746 
747  $defaults = [
748  'items' => $relationships,
749  'offset' => null,
750  'limit' => null,
751  'list_class' => 'elgg-list-relationship',
752  'full_view' => false,
753  'list_type' => $list_type,
754  'offset_key' => 'reloff',
755  ];
756 
757  $vars = array_merge($defaults, $vars);
758 
759  if (!$vars['limit'] && !$vars['offset']) {
760  // no need for pagination if listing is unlimited
761  $vars['pagination'] = false;
762  }
763 
764  $view = "page/components/{$vars['list_type']}";
765  if (!elgg_view_exists($view)) {
766  $view = 'page/components/list';
767  }
768 
769  return elgg_view($view, $vars);
770 }
771 
789  $defaults = [
790  'full_view' => true,
791  ];
792 
793  $vars = array_merge($defaults, $vars);
794  $vars['relationship'] = $relationship;
795 
796  $name = $relationship->relationship;
797  if (empty($name)) {
798  return '';
799  }
800 
801  $relationship_views = [
802  (string) elgg_extract('item_view', $vars, ''),
803  "relationship/{$name}",
804  'relationship/default',
805  ];
806 
807  foreach ($relationship_views as $view) {
808  if (elgg_view_exists($view)) {
809  return elgg_view($view, $vars);
810  }
811  }
812 
813  return '';
814 }
815 
826 function elgg_view_title(string $title, array $vars = []): string {
827  $vars['title'] = $title;
828 
829  return elgg_view('page/elements/title', $vars);
830 }
831 
843 function elgg_view_friendly_time($time, $time_updated = null): string {
844  $view = 'output/friendlytime';
845  $vars = [
846  'time' => $time,
847  'time_updated' => $time_updated,
848  ];
849  $viewtype = elgg_view_exists($view) ? '' : 'default';
850 
852 }
853 
867 function elgg_view_comments(\ElggEntity $entity, bool $add_comment = true, array $vars = []): string {
868  if (!$entity->hasCapability('commentable')) {
869  return '';
870  }
871 
872  $vars['entity'] = $entity;
873  $vars['show_add_form'] = $add_comment;
874  $vars['class'] = elgg_extract('class', $vars, "{$entity->getSubtype()}-comments");
875 
876  $default_id = 'comments';
877  if ($entity instanceof \ElggComment) {
878  $default_id .= "-{$entity->guid}";
879  }
880 
881  $vars['id'] = elgg_extract('id', $vars, $default_id);
882 
883  $output = elgg_trigger_event_results('comments', $entity->getType(), $vars, false);
884  if (is_string($output)) {
885  return $output;
886  }
887 
888  return elgg_view('page/elements/comments', $vars);
889 }
890 
909 function elgg_view_image_block(string $image, string $body, array $vars = []): string {
910  $vars['image'] = $image;
911  $vars['body'] = $body;
912  return elgg_view('page/components/image_block', $vars);
913 }
914 
930 function elgg_view_module(string $type, string $title, string $body, array $vars = []): string {
931  $vars['type'] = $type;
932  $vars['title'] = $title;
933  $vars['body'] = $body;
934  return elgg_view('page/components/module', $vars);
935 }
936 
951 function elgg_view_message(string $type, string $body, array $vars = []): string {
952  $vars['type'] = $type;
953  $vars['body'] = $body;
954  return elgg_view('page/components/message', $vars);
955 }
956 
966 function elgg_view_river_item(\ElggRiverItem $item, array $vars = []): string {
967 
968  // checking default viewtype since some viewtypes do not have unique views per item (rss)
969  $view = $item->getView();
970 
971  $subject = $item->getSubjectEntity();
972  $object = $item->getObjectEntity();
973  if (!$subject || !$object) {
974  // subject is disabled or subject/object deleted
975  return '';
976  }
977 
978  if (elgg_extract('register_rss_link', $vars)) {
980  }
981 
982  $vars['item'] = $item;
983 
984  // create river view logic
985  $type = $object->getType();
986  $subtype = $object->getSubtype();
987  $action = $item->action_type;
988 
989  $river_views = [
990  elgg_extract('item_view', $vars, ''),
991  'river/item', // important for other viewtypes, e.g. "rss"
992  $view,
993  "river/{$type}/{$subtype}/{$action}",
994  "river/{$type}/{$subtype}/default",
995  "river/{$type}/{$action}",
996  "river/{$type}/default",
997  'river/elements/layout',
998  ];
999 
1000  foreach ($river_views as $view) {
1001  if (elgg_view_exists($view)) {
1002  return elgg_view($view, $vars);
1003  }
1004  }
1005 
1006  return '';
1007 }
1008 
1044 function elgg_view_form(string $action, array $form_vars = [], array $body_vars = []): string {
1045  return _elgg_services()->forms->render($action, $form_vars, $body_vars);
1046 }
1047 
1057 function elgg_set_form_footer(string $footer = ''): void {
1058  _elgg_services()->forms->setFooter($footer);
1059 }
1060 
1065 function elgg_get_form_footer(): string {
1066  return _elgg_services()->forms->getFooter();
1067 }
1068 
1079 function _elgg_split_vars(array $vars = []): array {
1080  $return = [
1081  '' => [],
1082  '#' => [],
1083  ];
1084 
1085  foreach ($vars as $key => $value) {
1086  if (str_starts_with($key, '#')) {
1087  $key = substr($key, 1);
1088  $return['#'][$key] = $value;
1089  } else {
1090  $return[''][$key] = $value;
1091  }
1092  }
1093 
1094  return $return;
1095 }
1096 
1116 function elgg_view_field(array $params = []): string {
1117 
1118  if (isset($params['#html'])) {
1119  return (string) $params['#html'];
1120  }
1121 
1122  if (empty($params['#type'])) {
1123  _elgg_services()->logger->error(__FUNCTION__ . '(): $params["#type"] is required.');
1124  return '';
1125  }
1126 
1127  $input_type = $params['#type'];
1128  if (!elgg_view_exists("input/{$input_type}")) {
1129  return '';
1130  }
1131 
1132  $hidden_types = ['hidden', 'securitytoken'];
1133  if (in_array($input_type, $hidden_types)) {
1135  return elgg_view("input/{$input_type}", $params['']);
1136  }
1137 
1138  if (empty($params['id'])) {
1139  $params['id'] = 'elgg-field-' . base_convert(mt_rand(), 10, 36);
1140  }
1141 
1142  $make_special_checkbox_label = false;
1143  if (in_array($input_type, ['checkbox', 'switch']) && (isset($params['label']) || isset($params['#label']))) {
1144  if (isset($params['#label']) && isset($params['label'])) {
1145  $params['label_tag'] = 'div';
1146  } else {
1147  $label = elgg_extract('label', $params);
1148  $label = elgg_extract('#label', $params, $label);
1149 
1150  $params['#label'] = $label;
1151  unset($params['label']);
1152 
1153  // Single checkbox input view gets special treatment
1154  // We don't want the field label to appear a checkbox without a label
1155  $make_special_checkbox_label = true;
1156  }
1157  }
1158 
1159  // Need to set defaults to prevent input keys with same name ending up in element vars if not provided
1160  $defaults = [
1161  '#class' => ELGG_ENTITIES_ANY_VALUE,
1162  '#help' => ELGG_ENTITIES_ANY_VALUE,
1163  '#label' => ELGG_ENTITIES_ANY_VALUE,
1164  '#view' => ELGG_ENTITIES_ANY_VALUE,
1165  ];
1166  $params = array_merge($defaults, $params);
1167 
1168  // first pass non-hash keys into both
1169  $split_params = _elgg_split_vars($params);
1170 
1171  // $vars passed to input/$input_name
1172  $input_vars = $split_params[''];
1173 
1174  // $vars passed to label, help and field wrapper views
1175  $element_vars = array_merge($split_params[''], $split_params['#']);
1176 
1177  // field input view needs this
1178  $input_vars['input_type'] = $input_type;
1179 
1180  // field views get more data
1181  $element_vars['input_type'] = $input_type;
1182 
1183  // correct the label vars
1184  $label_vars = $element_vars;
1185  if (in_array($input_type, ['checkboxes', 'radio'])) {
1186  // the field label shouldn't point to the wrapping <ul> as that isn't a valid target for a <label>
1187  unset($label_vars['id']);
1188  }
1189 
1190  $element_vars['label'] = elgg_view('elements/forms/label', $label_vars);
1191  $element_vars['help'] = elgg_view('elements/forms/help', $element_vars);
1192 
1193  if ($make_special_checkbox_label) {
1194  $input_vars['label'] = $element_vars['label'];
1195  $input_vars['label_tag'] = 'div';
1196  unset($element_vars['label']);
1197  }
1198 
1199  $element_vars['input'] = elgg_view('elements/forms/input', $input_vars);
1200 
1201  return elgg_view('elements/forms/field', $element_vars);
1202 }
1203 
1216 function elgg_view_tagcloud(array $options = []): string {
1217  return elgg_view('output/tagcloud', [
1218  'value' => elgg_get_tags($options),
1219  'type' => elgg_extract('type', $options, ''),
1220  'subtype' => elgg_extract('subtype', $options, ''),
1221  ]);
1222 }
1223 
1234 function elgg_view_list_item($item, array $vars = []): string {
1235 
1236  if ($item instanceof \ElggEntity) {
1237  return elgg_view_entity($item, $vars);
1238  } else if ($item instanceof \ElggAnnotation) {
1239  return elgg_view_annotation($item, $vars);
1240  } else if ($item instanceof \ElggRiverItem) {
1241  return elgg_view_river_item($item, $vars);
1242  } else if ($item instanceof ElggRelationship) {
1244  }
1245 
1246  $view = (string) elgg_extract('item_view', $vars);
1247  if ($view && elgg_view_exists($view)) {
1248  $vars['item'] = $item;
1249  return elgg_view($view, $vars);
1250  }
1251 
1252  return '';
1253 }
1254 
1263 function elgg_view_icon(string $name, array $vars = []): string {
1264  $vars['class'] = elgg_extract_class($vars, "elgg-icon-{$name}");
1265 
1266  return elgg_view('output/icon', $vars);
1267 }
1268 
1274 function elgg_register_rss_link(): void {
1275  _elgg_services()->config->_elgg_autofeed = true;
1276 }
1277 
1283 function elgg_unregister_rss_link(): void {
1284  _elgg_services()->config->_elgg_autofeed = false;
1285 }
1286 
1293 function _elgg_has_rss_link(): bool {
1294  if (_elgg_services()->config->disable_rss) {
1295  return false;
1296  }
1297 
1298  return (bool) _elgg_services()->config->_elgg_autofeed;
1299 }
1300 
1308 function elgg_views_boot(): void {
1309  _elgg_services()->views->registerCoreViews();
1310 
1311  elgg_register_external_file('css', 'font-awesome', elgg_get_simplecache_url('font-awesome/css/all.min.css'));
1312  elgg_load_external_file('css', 'font-awesome');
1313 
1314  elgg_extend_view('elgg.css', 'lightbox/elgg-colorbox-theme/colorbox.css');
1315  elgg_extend_view('elgg.css', 'entity/edit/icon/crop.css');
1316 
1317  elgg_require_css('elgg');
1318 
1319  elgg_register_esm('cropperjs', elgg_get_simplecache_url('cropperjs/cropper.esm.js'));
1320  elgg_register_esm('jquery', elgg_get_simplecache_url('elgg/jquery.mjs'));
1321  elgg_register_esm('jquery-ui', elgg_get_simplecache_url('jquery-ui.js'));
1322  elgg_register_esm('jquery-cropper/jquery-cropper', elgg_get_simplecache_url('jquery-cropper/jquery-cropper.esm.js'));
1323 
1324  elgg_import_esm('elgg');
1325  elgg_import_esm('elgg/lightbox');
1326  elgg_import_esm('elgg/security');
1327 
1328  elgg_extend_view('jquery-ui.js', 'jquery.ui.touch-punch.js');
1329  elgg_extend_view('initialize_elgg.js', 'elgg/prevent_clicks.js', 1);
1330 
1331  elgg_register_ajax_view('languages.js');
1332 }
1333 
1342 function _elgg_get_js_page_data(array $params = []): array {
1343  $data = elgg_trigger_event_results('elgg.data', 'page', $params, []);
1344  if (!is_array($data)) {
1345  _elgg_services()->logger->error('"elgg.data" Event handlers must return an array. Returned ' . gettype($data) . '.');
1346  $data = [];
1347  }
1348 
1349  $message_delay = (int) elgg_get_config('message_delay');
1350  if ($message_delay < 1) {
1351  $message_delay = 6;
1352  }
1353 
1354  $elgg = [
1355  'config' => [
1356  'lastcache' => (int) _elgg_services()->config->lastcache,
1357  'viewtype' => elgg_get_viewtype(),
1358  'simplecache_enabled' => (int) _elgg_services()->simpleCache->isEnabled(),
1359  'current_language' => elgg_get_current_language(),
1360  'language' => _elgg_services()->config->language ?: 'en',
1361  'wwwroot' => elgg_get_site_url(),
1362  'message_delay' => $message_delay * 1000,
1363  ],
1364  'release' => elgg_get_release(),
1365  'security' => [
1366  // refresh token 3 times during its lifetime (in microseconds 1000 * 1/3)
1367  'interval' => (int) _elgg_services()->csrf->getActionTokenTimeout() * 333,
1368 
1369  'token' => [
1370  '__elgg_ts' => $ts = _elgg_services()->csrf->getCurrentTime()->getTimestamp(),
1371  '__elgg_token' => _elgg_services()->csrf->generateActionToken($ts),
1372  ],
1373  ],
1374  'session' => [
1375  'user' => null,
1376  'token' => _elgg_services()->session->get('__elgg_session'),
1377  ],
1378  'data' => $data,
1379  ];
1380 
1382  if ($user instanceof ElggUser) {
1383  $user_object = $user->toObject();
1384  $user_object->admin = $user->isAdmin();
1385 
1386  $elgg['user'] = (array) $user_object;
1387  }
1388 
1389  return $elgg;
1390 }
1391 
1403 function _elgg_view_under_viewtype(string $view, array $vars, string $viewtype): string {
1404  $current_view_type = null;
1405  if ($viewtype) {
1406  $current_view_type = elgg_get_viewtype();
1408  }
1409 
1410  $ret = elgg_view($view, $vars);
1411 
1412  if (isset($current_view_type)) {
1413  elgg_set_viewtype($current_view_type);
1414  }
1415 
1416  return $ret;
1417 }
1418 
1429 function elgg_view_url(string $href, ?string $text = null, array $options = []): string {
1430  $options['is_trusted'] = elgg_extract('is_trusted', $options, true);
1431  $options['href'] = $href;
1432  $options['text'] = $text;
1433 
1434  return elgg_view('output/url', $options);
1435 }
1436 
1446 function elgg_view_entity_url(\ElggEntity $entity, array $options = []): string {
1447  return elgg_view_url($entity->getURL(), $entity->getDisplayName(), $options);
1448 }
1449 
1462 function elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version): string {
1463  return _elgg_services()->views->renderDeprecatedView($view, $vars, $suggestion, $version);
1464 }
1465 
1474 function elgg_view_no_results(string $text = ''): string {
1475  if (elgg_is_empty($text)) {
1476  $text = true;
1477  }
1478 
1479  return elgg_view('page/components/no_results', [
1480  'no_results' => $text,
1481  ]);
1482 }
$vars
Definition: theme.php:3
$entity
Definition: reset.php:8
if(! $user||! $user->canDelete()) $name
Definition: delete.php:22
if($id< 1) $annotation
Definition: delete.php:11
if(!empty($avatar) &&! $avatar->isValid()) elseif(empty($avatar)) if(! $owner->saveIconFromUploadedFile('avatar')) if(!elgg_trigger_event('profileiconupdate', $owner->type, $owner)) $view
Definition: upload.php:39
$subtype
Definition: delete.php:22
$type
Definition: delete.php:21
catch(AuthenticationException|LoginException $e) if(elgg_is_xhr()) $output
Definition: login.php:86
$params
Saves global plugin settings.
Definition: save.php:13
if(! $items) $item
Definition: delete.php:13
if(empty($plugins)) $errors
if(!elgg_view_exists("plugins/{$plugin_id}/settings")) $form_vars
if(! $annotation instanceof ElggAnnotation) $time
Definition: time.php:20
if(! $entity instanceof \ElggUser) $data
Definition: attributes.php:13
$user
Definition: ban.php:7
$text
Definition: button.php:26
elgg_get_simplecache_url(string $view)
Get the URL for the cached view.
Definition: cache.php:78
foreach($categories as $key=> $category) $body
Definition: categories.php:38
if($vars['name'] && $vars['default'] !==false) $input_vars
Definition: checkboxes.php:89
Entity Annotation.
Thrown when page is not accessible.
Exception thrown if an argument is not of the expected type.
A complete menu, sorted, filtered by the "prepare" event, and split into sections.
Definition: Menu.php:10
Linear set of menu items collected from configuration and the "register" event.
elgg_get_site_url()
Get the URL for the current (or specified) site, ending with "/".
elgg_get_config(string $name, $default=null)
Get an Elgg configuration value.
elgg_get_release()
Get the current Elgg release.
const ELGG_ENTITIES_ANY_VALUE
Constant to request the value of a parameter be ignored in elgg_get_*() functions.
Definition: constants.php:21
if($who_can_change_language==='nobody') elseif($who_can_change_language==='admin_only' &&!elgg_is_admin_logged_in()) $options
Definition: language.php:20
$version
if($email instanceof \Elgg\Email) $object
Definition: body.php:24
$subject
HTML body of an email.
Definition: body.php:11
$views
Definition: item.php:17
$menu_view
Definition: default.php:31
$image
Definition: image_block.php:26
if($item instanceof \ElggEntity) elseif($item instanceof \ElggRiverItem) elseif($item instanceof \ElggRelationship) elseif(is_callable([ $item, 'getType']))
Definition: item.php:48
$relationship
Elgg default relationship view.
Definition: default.php:10
$body_vars
if($view &&elgg_view_exists($view)) $label
Definition: field.php:26
$footer
Wrap form footer.
Definition: footer.php:11
elgg_extract_class(array $array, array|string $existing=[], string $extract_key='class')
Extract class names from an array, optionally merging into a preexisting set.
Definition: elgglib.php:269
_elgg_services()
Get the global service provider.
Definition: elgglib.php:343
elgg_extract($key, $array, $default=null, bool $strict=true)
Checks for $array[$key] and returns its value if it exists, else returns $default.
Definition: elgglib.php:246
get_input(string $variable, $default=null, bool $filter_result=true)
Parameter input functions.
Definition: input.php:20
elgg_is_empty($value)
Check if a value isn't empty, but allow 0 and '0'.
Definition: input.php:176
elgg_get_tags(array $options=[])
Get popular tags and their frequencies.
Definition: metadata.php:68
$defaults
Generic entity header upload helper.
Definition: header.php:6
elgg_import_esm(string $name)
Helper functions for external files like css/js.
elgg_load_external_file(string $type, string $name)
Load an external resource for use on this page.
elgg_register_external_file(string $type, string $name, string $url, string $location='')
Core registration function for external files.
elgg_register_esm(string $name, string $href)
Registers an ES module to the import map.
elgg_require_css(string $view)
Register a CSS view name to be included in the HTML head.
$value
Definition: generic.php:51
$title
Definition: generic.php:50
$viewtype
Definition: default.php:11
elgg_get_current_language()
Get the current system/user language or 'en'.
Definition: languages.php:27
elgg_is_xhr()
Checks whether the request was requested via ajax.
Definition: actions.php:79
elgg_trigger_event_results(string $event, string $type, array $params=[], $returnvalue=null)
Triggers an event where it is expected that the mixed return value could be manipulated by event call...
Definition: events.php:117
elgg_view_entity_icon(\ElggEntity $entity, string $size='medium', array $vars=[])
View the icon of an entity.
Definition: views.php:553
elgg_get_viewtype()
Return the current view type.
Definition: views.php:73
elgg_view_relationship(\ElggRelationship $relationship, array $vars=[])
Returns a string of a rendered relationship.
Definition: views.php:788
elgg_view_comments(\ElggEntity $entity, bool $add_comment=true, array $vars=[])
Returns rendered comments and a comment form for an entity.
Definition: views.php:867
_elgg_has_rss_link()
Should the RSS view of this URL be linked to?
Definition: views.php:1293
elgg_view_icon(string $name, array $vars=[])
View an icon glyph.
Definition: views.php:1263
elgg_view_module(string $type, string $title, string $body, array $vars=[])
Wrapper function for the module display pattern.
Definition: views.php:930
elgg_view_no_results(string $text='')
Helper function to display a no results view.
Definition: views.php:1474
elgg_get_view_extensions(string $view)
Get the views (and priorities) that extend a view.
Definition: views.php:210
elgg_view_tagcloud(array $options=[])
Create a tagcloud for viewing.
Definition: views.php:1216
elgg_view_exists(string $view, string $viewtype='', bool $recurse=true)
Returns whether the specified view exists.
Definition: views.php:131
elgg_unregister_rss_link()
Remove the RSS icon link and link element from the head.
Definition: views.php:1283
elgg_extend_view(string $view, string $view_extension, int $priority=501)
Extends a view with another view.
Definition: views.php:183
elgg_register_ajax_view(string $view)
Register a view to be available for ajax calls.
Definition: views.php:104
elgg_view_annotation(\ElggAnnotation $annotation, array $vars=[])
Returns a string of a rendered annotation.
Definition: views.php:594
_elgg_get_js_page_data(array $params=[])
Get the initial contents of "elgg" client side.
Definition: views.php:1342
elgg_unextend_view(string $view, string $view_extension)
Unextends a view.
Definition: views.php:196
_elgg_split_vars(array $vars=[])
Split array of vars into subarrays based on 'hash' prefix.
Definition: views.php:1079
elgg_view_annotation_list(array $annotations, array $vars=[])
Returns a rendered list of annotations, plus pagination.
Definition: views.php:696
elgg_view_field(array $params=[])
Renders a form field, usually with a wrapper element, a label, help text, etc.
Definition: views.php:1116
elgg_unregister_ajax_view(string $view)
Unregister a view for ajax calls.
Definition: views.php:116
elgg_views_boot()
Initialize viewtypes on system boot event This ensures simplecache is cleared during upgrades.
Definition: views.php:1308
elgg_view_list_item($item, array $vars=[])
View an item in a list.
Definition: views.php:1234
elgg_set_form_footer(string $footer='')
Sets form footer and defers its rendering until the form view and extensions have been rendered.
Definition: views.php:1057
elgg_view_entity_url(\ElggEntity $entity, array $options=[])
Helper function for outputting a link to an entity.
Definition: views.php:1446
elgg_get_form_footer()
Returns currently set footer, or false if not in the form rendering stack.
Definition: views.php:1065
_elgg_view_under_viewtype(string $view, array $vars, string $viewtype)
Render a view while the global viewtype is temporarily changed.
Definition: views.php:1403
elgg_view_image_block(string $image, string $body, array $vars=[])
Wrapper function for the image block display pattern.
Definition: views.php:909
elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version)
Display a view with a deprecation notice.
Definition: views.php:1462
elgg_view_river_item(\ElggRiverItem $item, array $vars=[])
Renders a human-readable representation of a river item.
Definition: views.php:966
elgg_view_message(string $type, string $body, array $vars=[])
Wrapper function for the message display pattern.
Definition: views.php:951
elgg_view_menu($menu, array $vars=[])
Render a menu.
Definition: views.php:449
elgg_view_entity(\ElggEntity $entity, array $vars=[])
Returns a string of a rendered entity.
Definition: views.php:501
elgg_view_form(string $action, array $form_vars=[], array $body_vars=[])
Definition: views.php:1044
elgg_view_layout(string $layout_name, array $vars=[])
Displays a layout with optional parameters.
Definition: views.php:360
elgg_view_relationship_list(array $relationships, array $vars=[])
Returns a rendered list of relationships, plus pagination.
Definition: views.php:743
elgg_view_resource(string $name, array $vars=[])
Render a resource view.
Definition: views.php:315
elgg_view_friendly_time($time, $time_updated=null)
Displays a UNIX timestamp in a friendly way.
Definition: views.php:843
elgg_register_viewtype_fallback(string $viewtype)
Register a viewtype to fall back to a default view if a view isn't found for that viewtype.
Definition: views.php:88
elgg_view_entity_list(array $entities, array $vars=[])
Returns a rendered list of entities with pagination.
Definition: views.php:647
elgg_register_rss_link()
Include the RSS icon link and link element in the head.
Definition: views.php:1274
elgg_view_title(string $title, array $vars=[])
Renders a title.
Definition: views.php:826
elgg_view_page(string $title, string|array $body, string $page_shell='default', array $vars=[])
Assembles and outputs a full page.
Definition: views.php:237
elgg_set_viewtype(string $viewtype='')
Manually set the viewtype.
Definition: views.php:60
elgg_view_url(string $href, ?string $text=null, array $options=[])
Helper function for outputting urls.
Definition: views.php:1429
elgg_view(string $view, array $vars=[], string $viewtype='')
Return a parsed view.
Definition: views.php:156
if(!empty($title) &&!empty($icon_name)) if(!empty($title)) if(!empty($menu)) if(!empty($header)) if(!empty($body)) $contents
Definition: message.php:73
if($item->getLinkClass()) $href
Definition: submit.php:22
$time_updated
Definition: time.php:21
if(empty($count)) $offset
Definition: pagination.php:26
$timer
Definition: pending.php:28
if($container instanceof ElggGroup && $container->guid !=elgg_get_page_owner_guid()) $key
Definition: summary.php:44
if(parse_url(elgg_get_site_url(), PHP_URL_PATH) !=='/') if(file_exists(elgg_get_root_path() . 'robots.txt'))
Set robots.txt.
Definition: robots.php:10
$ts
CSRF security token view for use with secure forms.
elgg_get_logged_in_user_entity()
Return the current logged in user, or null if no user is logged in.
Definition: sessions.php:24
elgg_is_logged_in()
Returns whether or not the user is currently logged in.
Definition: sessions.php:43
$priority
$action
Definition: subscribe.php:11
$size
Definition: thumb.php:23
$input_type
Helper view that can be used to filter vars for all input views.
Definition: input.php:6
$menu
Form body for setting up site menu.
Definition: save.php:7
$messages
Definition: admin.php:12
return["default"=>["jquery.js"=> "vendor/npm-asset/jquery/dist/jquery.min.js", "jquery.min.map"=> "vendor/npm-asset/jquery/dist/jquery.min.map", "jquery-ui.js"=> "vendor/npm-asset/jquery-ui/dist/jquery-ui.min.js", "jquery.colorbox.js"=> "vendor/npm-asset/jquery-colorbox/jquery.colorbox-min.js", "jquery.ui.touch-punch.js"=> "vendor/npm-asset/jquery-ui-touch-punch/jquery.ui.touch-punch.js", "sprintf.js"=> "vendor/npm-asset/sprintf-js/src/sprintf.js", "focus-trap.mjs"=> "vendor/npm-asset/focus-trap/dist/focus-trap.esm.js", "tabbable.mjs"=> "vendor/npm-asset/tabbable/dist/index.esm.js", "font-awesome/css/"=> "vendor/fortawesome/font-awesome/css/", "font-awesome/otfs/"=> "vendor/fortawesome/font-awesome/otfs/", "font-awesome/webfonts/"=> "vendor/fortawesome/font-awesome/webfonts/", "jquery-ui/"=> "vendor/npm-asset/jquery-ui/ui", "tagify/"=> "vendor/npm-asset/yaireo--tagify/dist", "normalize.css"=> "vendor/npm-asset/normalize.css/normalize.css", "cropperjs/"=> "vendor/npm-asset/cropperjs/dist/", "jquery-cropper/"=> "vendor/npm-asset/jquery-cropper/dist/", "jquery.ui.autocomplete.html.js"=> dirname(__DIR__) . "/bower_components/jquery-ui-extensions/src/autocomplete/jquery.ui.autocomplete.html.js",],]
Definition: views.php:44