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 
235 function elgg_view_page(string $title, string|array $body, string $page_shell = 'default', array $vars = []): string {
236 
237  if (elgg_is_xhr() && get_input('_elgg_ajax_list')) {
238  // requested by ajaxed pagination
239  return is_array($body) ? (string) elgg_extract('content', $body) : $body;
240  }
241 
242  if (is_array($body)) {
243  $vars['entity'] = elgg_extract('entity', $body, elgg_extract('entity', $vars));
244 
245  $body['title'] = elgg_extract('title', $body, $title);
246  $body = elgg_view_layout('default', $body);
247  }
248 
249  $timer = _elgg_services()->timer;
250  if (!$timer->hasEnded(['build page'])) {
251  $timer->end(['build page']);
252  }
253 
254  $timer->begin([__FUNCTION__]);
255 
256  $params = [];
257  $params['identifier'] = _elgg_services()->request->getFirstUrlSegment();
258  $params['segments'] = _elgg_services()->request->getUrlSegments();
259  array_shift($params['segments']);
260  $page_shell = elgg_trigger_event_results('shell', 'page', $params, $page_shell);
261 
262  $system_messages = _elgg_services()->system_messages;
263 
264  $messages = null;
265  if ($system_messages->count()) {
266  $messages = $system_messages->dumpRegister();
267 
268  if (isset($messages['error'])) {
269  // always make sure error is the first type
270  $errors = [
271  'error' => $messages['error']
272  ];
273 
274  unset($messages['error']);
275  $messages = array_merge($errors, $messages);
276  }
277  }
278 
279  $vars['title'] = $title;
280  $vars['body'] = $body;
281  $vars['sysmessages'] = $messages;
282  $vars['page_shell'] = $page_shell;
283 
284  $vars['head'] = elgg_trigger_event_results('head', 'page', $vars, ['metas' => [], 'links' => []]);
285 
286  $vars = elgg_trigger_event_results('output:before', 'page', [], $vars);
287 
288  $output = elgg_view("page/{$page_shell}", $vars);
289 
290  // Allow plugins to modify the output
291  $output = elgg_trigger_event_results('output', 'page', $vars, $output);
292 
293  $timer->end([__FUNCTION__]);
294  return $output;
295 }
296 
307 function elgg_view_resource(string $name, array $vars = []): string {
308  $view = "resources/{$name}";
309 
310  if (elgg_view_exists($view)) {
311  return _elgg_services()->views->renderView($view, $vars);
312  }
313 
314  if (elgg_get_viewtype() !== 'default' && elgg_view_exists($view, 'default')) {
315  return _elgg_services()->views->renderView($view, $vars, 'default');
316  }
317 
318  _elgg_services()->logger->error("The view {$view} is missing.");
319 
320  // only works for default viewtype
321  throw new PageNotFoundException();
322 }
323 
352 function elgg_view_layout(string $layout_name, array $vars = []): string {
353  $timer = _elgg_services()->timer;
354  if (!$timer->hasEnded(['build page'])) {
355  $timer->end(['build page']);
356  }
357 
358  $timer->begin([__FUNCTION__]);
359 
360  $vars['identifier'] = _elgg_services()->request->getFirstUrlSegment();
361  $vars['segments'] = _elgg_services()->request->getUrlSegments();
362  array_shift($vars['segments']);
363 
364  $layout_name = elgg_trigger_event_results('layout', 'page', $vars, $layout_name);
365 
366  $vars['layout'] = $layout_name;
367 
368  $layout_views = [
369  "page/layouts/{$layout_name}",
370  'page/layouts/default',
371  ];
372 
373  $output = '';
374  foreach ($layout_views as $layout_view) {
375  if (elgg_view_exists($layout_view)) {
376  $output = elgg_view($layout_view, $vars);
377  break;
378  }
379  }
380 
381  $timer->end([__FUNCTION__]);
382  return $output;
383 }
384 
441 function elgg_view_menu($menu, array $vars = []): string {
442 
443  $menu_view = (string) elgg_extract('menu_view', $vars);
444  unset($vars['menu_view']);
445 
446  if (is_string($menu)) {
447  $menu = _elgg_services()->menus->getMenu($menu, $vars);
448  } elseif ($menu instanceof UnpreparedMenu) {
449  $menu = _elgg_services()->menus->prepareMenu($menu);
450  }
451 
452  if (!$menu instanceof Menu) {
453  throw new ElggInvalidArgumentException('$menu must be a menu name, a Menu, or UnpreparedMenu');
454  }
455 
456  $name = $menu->getName();
457  $params = $menu->getParams();
458 
459  $views = [
460  $menu_view,
461  "navigation/menu/{$name}",
462  'navigation/menu/default',
463  ];
464 
465  foreach ($views as $view) {
466  if (elgg_view_exists($view)) {
467  return elgg_view($view, $params);
468  }
469  }
470 
471  return '';
472 }
473 
493 function elgg_view_entity(\ElggEntity $entity, array $vars = []): string {
494 
495  $defaults = [
496  'full_view' => true,
497  ];
498 
499  $vars = array_merge($defaults, $vars);
500 
501  if (elgg_extract('register_rss_link', $vars, $vars['full_view'])) {
503  }
504 
505  $vars['entity'] = $entity;
506 
507  $entity_type = $entity->getType();
508  $entity_subtype = $entity->getSubtype();
509 
510  $subview = $vars['full_view'] ? 'full' : 'summary';
511 
512  $entity_views = [
513  (string) elgg_extract('item_view', $vars, ''),
514  "{$entity_type}/{$entity_subtype}/{$subview}",
515  "{$entity_type}/{$entity_subtype}",
516  "{$entity_type}/default",
517  ];
518 
519  $contents = '';
520  foreach ($entity_views as $view) {
521  if (elgg_view_exists($view)) {
523  break;
524  }
525  }
526 
527  return $contents;
528 }
529 
545 function elgg_view_entity_icon(\ElggEntity $entity, string $size = 'medium', array $vars = []): string {
546 
547  $vars['entity'] = $entity;
548  $vars['size'] = $size;
549 
550  $entity_type = $entity->getType();
551 
552  $subtype = $entity->getSubtype();
553 
554  $contents = '';
555  if (elgg_view_exists("icon/{$entity_type}/{$subtype}")) {
556  $contents = elgg_view("icon/{$entity_type}/{$subtype}", $vars);
557  }
558 
559  if (empty($contents) && elgg_view_exists("icon/{$entity_type}/default")) {
560  $contents = elgg_view("icon/{$entity_type}/default", $vars);
561  }
562 
563  if (empty($contents)) {
564  $contents = elgg_view('icon/default', $vars);
565  }
566 
567  return $contents;
568 }
569 
586 function elgg_view_annotation(\ElggAnnotation $annotation, array $vars = []): string {
587  $defaults = [
588  'full_view' => true,
589  ];
590 
591  $vars = array_merge($defaults, $vars);
592  $vars['annotation'] = $annotation;
593 
594  $name = $annotation->name;
595  if (empty($name)) {
596  return '';
597  }
598 
599  $annotation_views = [
600  (string) elgg_extract('item_view', $vars, ''),
601  "annotation/{$name}",
602  'annotation/default',
603  ];
604 
605  foreach ($annotation_views as $view) {
606  if (elgg_view_exists($view)) {
607  return elgg_view($view, $vars);
608  }
609  }
610 
611  return '';
612 }
613 
639 function elgg_view_entity_list(array $entities, array $vars = []): string {
640  $offset = (int) get_input('offset', 0);
641 
642  // list type can be passed as request parameter
643  $list_type = get_input('list_type', 'list');
644 
645  $defaults = [
646  'items' => $entities,
647  'list_class' => 'elgg-list-entity',
648  'full_view' => true,
649  'pagination' => true,
650  'list_type' => $list_type,
651  'offset' => $offset,
652  'limit' => null,
653  ];
654 
655  $vars = array_merge($defaults, $vars);
656 
657  if (!$vars['limit'] && !$vars['offset']) {
658  // no need for pagination if listing is unlimited
659  $vars['pagination'] = false;
660  }
661 
662  $view = "page/components/{$vars['list_type']}";
663  if (!elgg_view_exists($view)) {
664  $view = 'page/components/list';
665  }
666 
667  return elgg_view($view, $vars);
668 }
669 
688 function elgg_view_annotation_list(array $annotations, array $vars = []): string {
689  // list type can be passed as request parameter
690  $list_type = get_input('list_type', 'list');
691 
692  $defaults = [
693  'items' => $annotations,
694  'offset' => null,
695  'limit' => null,
696  'list_class' => 'elgg-list-annotation',
697  'full_view' => true,
698  'list_type' => $list_type,
699  'offset_key' => 'annoff',
700  ];
701 
702  $vars = array_merge($defaults, $vars);
703 
704  if (!$vars['limit'] && !$vars['offset']) {
705  // no need for pagination if listing is unlimited
706  $vars['pagination'] = false;
707  }
708 
709  $view = "page/components/{$vars['list_type']}";
710  if (!elgg_view_exists($view)) {
711  $view = 'page/components/list';
712  }
713 
714  return elgg_view($view, $vars);
715 }
716 
735 function elgg_view_relationship_list(array $relationships, array $vars = []): string {
736  // list type can be passed as request parameter
737  $list_type = get_input('list_type', 'list');
738 
739  $defaults = [
740  'items' => $relationships,
741  'offset' => null,
742  'limit' => null,
743  'list_class' => 'elgg-list-relationship',
744  'full_view' => false,
745  'list_type' => $list_type,
746  'offset_key' => 'reloff',
747  ];
748 
749  $vars = array_merge($defaults, $vars);
750 
751  if (!$vars['limit'] && !$vars['offset']) {
752  // no need for pagination if listing is unlimited
753  $vars['pagination'] = false;
754  }
755 
756  $view = "page/components/{$vars['list_type']}";
757  if (!elgg_view_exists($view)) {
758  $view = 'page/components/list';
759  }
760 
761  return elgg_view($view, $vars);
762 }
763 
781  $defaults = [
782  'full_view' => true,
783  ];
784 
785  $vars = array_merge($defaults, $vars);
786  $vars['relationship'] = $relationship;
787 
788  $name = $relationship->relationship;
789  if (empty($name)) {
790  return '';
791  }
792 
793  $relationship_views = [
794  (string) elgg_extract('item_view', $vars, ''),
795  "relationship/{$name}",
796  'relationship/default',
797  ];
798 
799  foreach ($relationship_views as $view) {
800  if (elgg_view_exists($view)) {
801  return elgg_view($view, $vars);
802  }
803  }
804 
805  return '';
806 }
807 
818 function elgg_view_title(string $title, array $vars = []): string {
819  $vars['title'] = $title;
820 
821  return elgg_view('page/elements/title', $vars);
822 }
823 
835 function elgg_view_friendly_time($time, $time_updated = null): string {
836  $view = 'output/friendlytime';
837  $vars = [
838  'time' => $time,
839  'time_updated' => $time_updated,
840  ];
841  $viewtype = elgg_view_exists($view) ? '' : 'default';
842 
844 }
845 
859 function elgg_view_comments(\ElggEntity $entity, bool $add_comment = true, array $vars = []): string {
860  if (!$entity->hasCapability('commentable')) {
861  return '';
862  }
863 
864  $vars['entity'] = $entity;
865  $vars['show_add_form'] = $add_comment;
866  $vars['class'] = elgg_extract('class', $vars, "{$entity->getSubtype()}-comments");
867 
868  $default_id = 'comments';
869  if ($entity instanceof \ElggComment) {
870  $default_id .= "-{$entity->guid}";
871  }
872 
873  $vars['id'] = elgg_extract('id', $vars, $default_id);
874 
875  $output = elgg_trigger_event_results('comments', $entity->getType(), $vars, false);
876  if (is_string($output)) {
877  return $output;
878  }
879 
880  return elgg_view('page/elements/comments', $vars);
881 }
882 
901 function elgg_view_image_block(string $image, string $body, array $vars = []): string {
902  $vars['image'] = $image;
903  $vars['body'] = $body;
904  return elgg_view('page/components/image_block', $vars);
905 }
906 
922 function elgg_view_module(string $type, string $title, string $body, array $vars = []): string {
923  $vars['type'] = $type;
924  $vars['title'] = $title;
925  $vars['body'] = $body;
926  return elgg_view('page/components/module', $vars);
927 }
928 
943 function elgg_view_message(string $type, string $body, array $vars = []): string {
944  $vars['type'] = $type;
945  $vars['body'] = $body;
946  return elgg_view('page/components/message', $vars);
947 }
948 
958 function elgg_view_river_item(\ElggRiverItem $item, array $vars = []): string {
959 
960  // checking default viewtype since some viewtypes do not have unique views per item (rss)
961  $view = $item->getView();
962 
963  $subject = $item->getSubjectEntity();
964  $object = $item->getObjectEntity();
965  if (!$subject || !$object) {
966  // subject is disabled or subject/object deleted
967  return '';
968  }
969 
970  if (elgg_extract('register_rss_link', $vars)) {
972  }
973 
974  $vars['item'] = $item;
975 
976  // create river view logic
977  $type = $object->getType();
978  $subtype = $object->getSubtype();
979  $action = $item->action_type;
980 
981  $river_views = [
982  elgg_extract('item_view', $vars, ''),
983  'river/item', // important for other viewtypes, e.g. "rss"
984  $view,
985  "river/{$type}/{$subtype}/{$action}",
986  "river/{$type}/{$subtype}/default",
987  "river/{$type}/{$action}",
988  "river/{$type}/default",
989  'river/elements/layout',
990  ];
991 
992  foreach ($river_views as $view) {
993  if (elgg_view_exists($view)) {
994  return elgg_view($view, $vars);
995  }
996  }
997 
998  return '';
999 }
1000 
1036 function elgg_view_form(string $action, array $form_vars = [], array $body_vars = []): string {
1037  return _elgg_services()->forms->render($action, $form_vars, $body_vars);
1038 }
1039 
1049 function elgg_set_form_footer(string $footer = ''): void {
1050  _elgg_services()->forms->setFooter($footer);
1051 }
1052 
1057 function elgg_get_form_footer(): string {
1058  return _elgg_services()->forms->getFooter();
1059 }
1060 
1072 function _elgg_split_vars(array $vars = [], ?array $prefixes = null): array {
1073 
1074  if (!isset($prefixes)) {
1075  $prefixes = ['#'];
1076  }
1077 
1078  $return = [];
1079  $default_section = ''; // something weird with PHP 8.1 compatibility
1080 
1081  foreach ($vars as $key => $value) {
1082  foreach ($prefixes as $prefix) {
1083  if (substr($key, 0, 1) === $prefix) {
1084  $key = substr($key, 1);
1085  $return[$prefix][$key] = $value;
1086  break;
1087  } else {
1088  $return[$default_section][$key] = $value;
1089  }
1090  }
1091  }
1092 
1093  return $return;
1094 }
1095 
1115 function elgg_view_field(array $params = []): string {
1116 
1117  if (isset($params['#html'])) {
1118  return (string) $params['#html'];
1119  }
1120 
1121  if (empty($params['#type'])) {
1122  _elgg_services()->logger->error(__FUNCTION__ . '(): $params["#type"] is required.');
1123  return '';
1124  }
1125 
1126  $input_type = $params['#type'];
1127  if (!elgg_view_exists("input/$input_type")) {
1128  return '';
1129  }
1130 
1131  $hidden_types = ['hidden', 'securitytoken'];
1132  if (in_array($input_type, $hidden_types)) {
1134  return elgg_view("input/{$input_type}", $params['']);
1135  }
1136 
1137  if (empty($params['id'])) {
1138  $params['id'] = 'elgg-field-' . base_convert(mt_rand(), 10, 36);
1139  }
1140 
1141  $make_special_checkbox_label = false;
1142  if (in_array($input_type, ['checkbox', 'switch']) && (isset($params['label']) || isset($params['#label']))) {
1143  if (isset($params['#label']) && isset($params['label'])) {
1144  $params['label_tag'] = 'div';
1145  } else {
1146  $label = elgg_extract('label', $params);
1147  $label = elgg_extract('#label', $params, $label);
1148 
1149  $params['#label'] = $label;
1150  unset($params['label']);
1151 
1152  // Single checkbox input view gets special treatment
1153  // We don't want the field label to appear a checkbox without a label
1154  $make_special_checkbox_label = true;
1155  }
1156  }
1157 
1158  // Need to set defaults to prevent input keys with same name ending up in element vars if not provided
1159  $defaults = [
1160  '#class' => ELGG_ENTITIES_ANY_VALUE,
1161  '#help' => ELGG_ENTITIES_ANY_VALUE,
1162  '#label' => ELGG_ENTITIES_ANY_VALUE,
1163  '#view' => ELGG_ENTITIES_ANY_VALUE,
1164  ];
1165  $params = array_merge($defaults, $params);
1166 
1167  // first pass non-hash keys into both
1168  $split_params = _elgg_split_vars($params);
1169 
1170  // $vars passed to input/$input_name
1171  $input_vars = $split_params[''];
1172 
1173  // $vars passed to label, help and field wrapper views
1174  $element_vars = array_merge($split_params[''], $split_params['#']);
1175 
1176  // field input view needs this
1177  $input_vars['input_type'] = $input_type;
1178 
1179  // field views get more data
1180  $element_vars['input_type'] = $input_type;
1181 
1182  // correct the label vars
1183  $label_vars = $element_vars;
1184  if (in_array($input_type, ['checkboxes', 'radio'])) {
1185  // the field label shouldn't point to the wrapping <ul> as that isn't a valid target for a <label>
1186  unset($label_vars['id']);
1187  }
1188 
1189  $element_vars['label'] = elgg_view('elements/forms/label', $label_vars);
1190 
1191  // wrap if present
1192  $element_vars['help'] = elgg_view('elements/forms/help', $element_vars);
1193 
1194  if ($make_special_checkbox_label) {
1195  $input_vars['label'] = $element_vars['label'];
1196  $input_vars['label_tag'] = 'div';
1197  unset($element_vars['label']);
1198  }
1199 
1200  $element_vars['input'] = elgg_view('elements/forms/input', $input_vars);
1201 
1202  return elgg_view('elements/forms/field', $element_vars);
1203 }
1204 
1217 function elgg_view_tagcloud(array $options = []): string {
1218  return elgg_view('output/tagcloud', [
1219  'value' => elgg_get_tags($options),
1220  'type' => elgg_extract('type', $options, ''),
1221  'subtype' => elgg_extract('subtype', $options, ''),
1222  ]);
1223 }
1224 
1235 function elgg_view_list_item($item, array $vars = []): string {
1236 
1237  if ($item instanceof \ElggEntity) {
1238  return elgg_view_entity($item, $vars);
1239  } else if ($item instanceof \ElggAnnotation) {
1240  return elgg_view_annotation($item, $vars);
1241  } else if ($item instanceof \ElggRiverItem) {
1242  return elgg_view_river_item($item, $vars);
1243  } else if ($item instanceof ElggRelationship) {
1245  }
1246 
1247  $view = (string) elgg_extract('item_view', $vars);
1248  if ($view && elgg_view_exists($view)) {
1249  $vars['item'] = $item;
1250  return elgg_view($view, $vars);
1251  }
1252 
1253  return '';
1254 }
1255 
1264 function elgg_view_icon(string $name, array $vars = []): string {
1265  $vars['class'] = elgg_extract_class($vars, "elgg-icon-{$name}");
1266 
1267  return elgg_view('output/icon', $vars);
1268 }
1269 
1275 function elgg_register_rss_link(): void {
1276  _elgg_services()->config->_elgg_autofeed = true;
1277 }
1278 
1284 function elgg_unregister_rss_link(): void {
1285  _elgg_services()->config->_elgg_autofeed = false;
1286 }
1287 
1294 function _elgg_has_rss_link(): bool {
1295  if (_elgg_services()->config->disable_rss) {
1296  return false;
1297  }
1298 
1299  return (bool) _elgg_services()->config->_elgg_autofeed;
1300 }
1301 
1309 function elgg_views_boot(): void {
1310  _elgg_services()->views->registerCoreViews();
1311 
1312  elgg_register_external_file('css', 'font-awesome', elgg_get_simplecache_url('font-awesome/css/all.min.css'));
1313  elgg_load_external_file('css', 'font-awesome');
1314 
1315  elgg_extend_view('elgg.css', 'lightbox/elgg-colorbox-theme/colorbox.css');
1316  elgg_extend_view('elgg.css', 'entity/edit/icon/crop.css');
1317 
1318  elgg_require_css('elgg');
1319 
1320  elgg_register_esm('cropperjs', elgg_get_simplecache_url('cropperjs/cropper.esm.js'));
1321  elgg_register_esm('jquery', elgg_get_simplecache_url('elgg/jquery.mjs'));
1322  elgg_register_esm('jquery-ui', elgg_get_simplecache_url('jquery-ui.js'));
1323  elgg_register_esm('jquery-cropper/jquery-cropper', elgg_get_simplecache_url('jquery-cropper/jquery-cropper.esm.js'));
1324 
1325  elgg_import_esm('elgg');
1326  elgg_import_esm('elgg/lightbox');
1327  elgg_import_esm('elgg/security');
1328 
1329  elgg_extend_view('jquery-ui.js', 'jquery.ui.touch-punch.js');
1330  elgg_extend_view('initialize_elgg.js', 'elgg/prevent_clicks.js', 1);
1331 
1332  elgg_register_ajax_view('languages.js');
1333 }
1334 
1343 function _elgg_get_js_page_data(array $params = []): array {
1344  $data = elgg_trigger_event_results('elgg.data', 'page', $params, []);
1345  if (!is_array($data)) {
1346  _elgg_services()->logger->error('"elgg.data" Event handlers must return an array. Returned ' . gettype($data) . '.');
1347  $data = [];
1348  }
1349 
1350  $message_delay = (int) elgg_get_config('message_delay');
1351  if ($message_delay < 1) {
1352  $message_delay = 6;
1353  }
1354 
1355  $elgg = [
1356  'config' => [
1357  'lastcache' => (int) _elgg_services()->config->lastcache,
1358  'viewtype' => elgg_get_viewtype(),
1359  'simplecache_enabled' => (int) _elgg_services()->simpleCache->isEnabled(),
1360  'current_language' => elgg_get_current_language(),
1361  'language' => _elgg_services()->config->language ?: 'en',
1362  'wwwroot' => elgg_get_site_url(),
1363  'message_delay' => $message_delay * 1000,
1364  ],
1365  'release' => elgg_get_release(),
1366  'security' => [
1367  // refresh token 3 times during its lifetime (in microseconds 1000 * 1/3)
1368  'interval' => (int) _elgg_services()->csrf->getActionTokenTimeout() * 333,
1369 
1370  'token' => [
1371  '__elgg_ts' => $ts = _elgg_services()->csrf->getCurrentTime()->getTimestamp(),
1372  '__elgg_token' => _elgg_services()->csrf->generateActionToken($ts),
1373  ],
1374  ],
1375  'session' => [
1376  'user' => null,
1377  'token' => _elgg_services()->session->get('__elgg_session'),
1378  ],
1379  'data' => $data,
1380  ];
1381 
1383  if ($user instanceof ElggUser) {
1384  $user_object = $user->toObject();
1385  $user_object->admin = $user->isAdmin();
1386 
1387  $elgg['user'] = (array) $user_object;
1388  }
1389 
1390  return $elgg;
1391 }
1392 
1404 function _elgg_view_under_viewtype(string $view, array $vars, string $viewtype): string {
1405  $current_view_type = null;
1406  if ($viewtype) {
1407  $current_view_type = elgg_get_viewtype();
1409  }
1410 
1411  $ret = elgg_view($view, $vars);
1412 
1413  if (isset($current_view_type)) {
1414  elgg_set_viewtype($current_view_type);
1415  }
1416 
1417  return $ret;
1418 }
1419 
1430 function elgg_view_url(string $href, ?string $text = null, array $options = []): string {
1431  $options['is_trusted'] = elgg_extract('is_trusted', $options, true);
1432  $options['href'] = $href;
1433  $options['text'] = $text;
1434 
1435  return elgg_view('output/url', $options);
1436 }
1437 
1447 function elgg_view_entity_url(\ElggEntity $entity, array $options = []): string {
1448  return elgg_view_url($entity->getURL(), $entity->getDisplayName(), $options);
1449 }
1450 
1463 function elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version): string {
1464  return _elgg_services()->views->renderDeprecatedView($view, $vars, $suggestion, $version);
1465 }
1466 
1475 function elgg_view_no_results(string $text = ''): string {
1476  if (elgg_is_empty($text)) {
1477  $text = true;
1478  }
1479 
1480  return elgg_view('page/components/no_results', [
1481  'no_results' => $text,
1482  ]);
1483 }
$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
$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:33
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:35
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
$output
Definition: download.php:9
$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:263
_elgg_services()
Get the global service provider.
Definition: elgglib.php:337
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:240
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:545
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:780
elgg_view_comments(\ElggEntity $entity, bool $add_comment=true, array $vars=[])
Returns rendered comments and a comment form for an entity.
Definition: views.php:859
_elgg_has_rss_link()
Should the RSS view of this URL be linked to?
Definition: views.php:1294
elgg_view_icon(string $name, array $vars=[])
View an icon glyph.
Definition: views.php:1264
elgg_view_module(string $type, string $title, string $body, array $vars=[])
Wrapper function for the module display pattern.
Definition: views.php:922
elgg_view_no_results(string $text='')
Helper function to display a no results view.
Definition: views.php:1475
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:1217
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:1284
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:586
_elgg_get_js_page_data(array $params=[])
Get the initial contents of "elgg" client side.
Definition: views.php:1343
elgg_unextend_view(string $view, string $view_extension)
Unextends a view.
Definition: views.php:196
elgg_view_annotation_list(array $annotations, array $vars=[])
Returns a rendered list of annotations, plus pagination.
Definition: views.php:688
elgg_view_field(array $params=[])
Renders a form field, usually with a wrapper element, a label, help text, etc.
Definition: views.php:1115
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:1309
elgg_view_list_item($item, array $vars=[])
View an item in a list.
Definition: views.php:1235
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:1049
elgg_view_entity_url(\ElggEntity $entity, array $options=[])
Helper function for outputting a link to an entity.
Definition: views.php:1447
elgg_get_form_footer()
Returns currently set footer, or false if not in the form rendering stack.
Definition: views.php:1057
_elgg_view_under_viewtype(string $view, array $vars, string $viewtype)
Render a view while the global viewtype is temporarily changed.
Definition: views.php:1404
elgg_view_image_block(string $image, string $body, array $vars=[])
Wrapper function for the image block display pattern.
Definition: views.php:901
elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version)
Display a view with a deprecation notice.
Definition: views.php:1463
elgg_view_river_item(\ElggRiverItem $item, array $vars=[])
Renders a human-readable representation of a river item.
Definition: views.php:958
elgg_view_message(string $type, string $body, array $vars=[])
Wrapper function for the message display pattern.
Definition: views.php:943
_elgg_split_vars(array $vars=[], ?array $prefixes=null)
Split array of vars into subarrays based on property prefixes.
Definition: views.php:1072
elgg_view_menu($menu, array $vars=[])
Render a menu.
Definition: views.php:441
elgg_view_entity(\ElggEntity $entity, array $vars=[])
Returns a string of a rendered entity.
Definition: views.php:493
elgg_view_form(string $action, array $form_vars=[], array $body_vars=[])
Definition: views.php:1036
elgg_view_layout(string $layout_name, array $vars=[])
Displays a layout with optional parameters.
Definition: views.php:352
elgg_view_relationship_list(array $relationships, array $vars=[])
Returns a rendered list of relationships, plus pagination.
Definition: views.php:735
elgg_view_resource(string $name, array $vars=[])
Render a resource view.
Definition: views.php:307
elgg_view_friendly_time($time, $time_updated=null)
Displays a UNIX timestamp in a friendly way.
Definition: views.php:835
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:639
elgg_register_rss_link()
Include the RSS icon link and link element in the head.
Definition: views.php:1275
elgg_view_title(string $title, array $vars=[])
Renders a title.
Definition: views.php:818
elgg_view_page(string $title, string|array $body, string $page_shell='default', array $vars=[])
Assembles and outputs a full page.
Definition: views.php:235
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:1430
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
$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/"=> "vendor/fortawesome/font-awesome/", "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:42