Elgg  Version 7.1
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  if (elgg_is_empty($title)) {
248  // try to get a title for the page shell
249  $title = elgg_extract('title', $body);
250  }
251 
252  $body['title'] = elgg_extract('title', $body, $title);
253  $body = elgg_view_layout('default', $body);
254  }
255 
256  $timer = _elgg_services()->timer;
257  if (!$timer->hasEnded(['build page'])) {
258  $timer->end(['build page']);
259  }
260 
261  $timer->begin([__FUNCTION__]);
262 
263  $params = [];
264  $params['identifier'] = _elgg_services()->request->getFirstUrlSegment();
265  $params['segments'] = _elgg_services()->request->getUrlSegments();
266  array_shift($params['segments']);
267 
268  $page_shell = elgg_trigger_event_results('shell', 'page', $params, $page_shell);
269  if ($page_shell === 'walled_garden') {
270  if (!elgg_get_config('walled_garden') || elgg_is_logged_in()) {
271  $page_shell = 'default';
272  }
273  }
274 
275  $system_messages = _elgg_services()->system_messages;
276 
277  $messages = null;
278  if ($system_messages->count()) {
279  $messages = $system_messages->dumpRegister();
280 
281  if (isset($messages['error'])) {
282  // always make sure error is the first type
283  $errors = [
284  'error' => $messages['error']
285  ];
286 
287  unset($messages['error']);
288  $messages = array_merge($errors, $messages);
289  }
290  }
291 
292  $vars['title'] = $title;
293  $vars['body'] = $body;
294  $vars['sysmessages'] = $messages;
295  $vars['page_shell'] = $page_shell;
296 
297  $vars['head'] = elgg_trigger_event_results('head', 'page', $vars, ['metas' => [], 'links' => []]);
298 
299  $vars = elgg_trigger_event_results('output:before', 'page', [], $vars);
300 
301  $output = elgg_view("page/{$page_shell}", $vars);
302 
303  // Allow plugins to modify the output
304  $output = elgg_trigger_event_results('output', 'page', $vars, $output);
305 
306  $timer->end([__FUNCTION__]);
307  return $output;
308 }
309 
320 function elgg_view_resource(string $name, array $vars = []): string {
321  $view = "resources/{$name}";
322 
323  if (elgg_view_exists($view)) {
324  return _elgg_services()->views->renderView($view, $vars);
325  }
326 
327  if (elgg_get_viewtype() !== 'default' && elgg_view_exists($view, 'default')) {
328  return _elgg_services()->views->renderView($view, $vars, 'default');
329  }
330 
331  _elgg_services()->logger->error("The view {$view} is missing.");
332 
333  // only works for default viewtype
334  throw new PageNotFoundException();
335 }
336 
365 function elgg_view_layout(string $layout_name, array $vars = []): string {
366  $timer = _elgg_services()->timer;
367  if (!$timer->hasEnded(['build page'])) {
368  $timer->end(['build page']);
369  }
370 
371  $timer->begin([__FUNCTION__]);
372 
373  $vars['identifier'] = _elgg_services()->request->getFirstUrlSegment();
374  $vars['segments'] = _elgg_services()->request->getUrlSegments();
375  array_shift($vars['segments']);
376 
377  $layout_name = elgg_trigger_event_results('layout', 'page', $vars, $layout_name);
378 
379  $vars['layout'] = $layout_name;
380 
381  $layout_views = [
382  "page/layouts/{$layout_name}",
383  'page/layouts/default',
384  ];
385 
386  $output = '';
387  foreach ($layout_views as $layout_view) {
388  if (elgg_view_exists($layout_view)) {
389  $output = elgg_view($layout_view, $vars);
390  break;
391  }
392  }
393 
394  $timer->end([__FUNCTION__]);
395  return $output;
396 }
397 
454 function elgg_view_menu($menu, array $vars = []): string {
455  $menu_view = (string) elgg_extract('menu_view', $vars);
456  unset($vars['menu_view']);
457 
458  if (isset($vars['prepare_vertical'])) {
459  $menu_name = is_string($menu) ? $menu : '';
460  elgg_deprecated_notice("Replace 'prepare_vertical' with 'prepare_toggle' when using 'elgg_view_menu('{$menu_name}')'", '7.1');
461 
462  $vars['prepare_toggle'] = elgg_extract('prepare_toggle', $vars, $vars['prepare_vertical']);
463  unset($vars['prepare_vertical']);
464  }
465 
466  if (is_string($menu)) {
467  $menu = _elgg_services()->menus->getMenu($menu, $vars);
468  } elseif ($menu instanceof UnpreparedMenu) {
469  $menu = _elgg_services()->menus->prepareMenu($menu);
470  }
471 
472  if (!$menu instanceof Menu) {
473  throw new ElggInvalidArgumentException('$menu must be a menu name, a Menu, or UnpreparedMenu');
474  }
475 
476  $name = $menu->getName();
477  $params = $menu->getParams();
478 
479  $views = [
480  $menu_view,
481  "navigation/menu/{$name}",
482  'navigation/menu/default',
483  ];
484 
485  foreach ($views as $view) {
486  if (elgg_view_exists($view)) {
487  return elgg_view($view, $params);
488  }
489  }
490 
491  return '';
492 }
493 
513 function elgg_view_entity(\ElggEntity $entity, array $vars = []): string {
514 
515  $defaults = [
516  'full_view' => true,
517  ];
518 
519  $vars = array_merge($defaults, $vars);
520 
521  if (elgg_extract('register_rss_link', $vars, $vars['full_view'])) {
523  }
524 
525  $vars['entity'] = $entity;
526 
527  $entity_type = $entity->getType();
528  $entity_subtype = $entity->getSubtype();
529 
530  $subview = $vars['full_view'] ? 'full' : 'summary';
531 
532  $entity_views = [
533  (string) elgg_extract('item_view', $vars, ''),
534  "{$entity_type}/{$entity_subtype}/{$subview}",
535  "{$entity_type}/{$entity_subtype}",
536  "{$entity_type}/default",
537  ];
538 
539  $contents = '';
540  foreach ($entity_views as $view) {
541  if (elgg_view_exists($view)) {
543  break;
544  }
545  }
546 
547  return $contents;
548 }
549 
565 function elgg_view_entity_icon(\ElggEntity $entity, string $size = 'medium', array $vars = []): string {
566 
567  $vars['entity'] = $entity;
568  $vars['size'] = $size;
569 
570  $entity_type = $entity->getType();
571 
572  $subtype = $entity->getSubtype();
573 
574  $contents = '';
575  if (elgg_view_exists("icon/{$entity_type}/{$subtype}")) {
576  $contents = elgg_view("icon/{$entity_type}/{$subtype}", $vars);
577  }
578 
579  if (empty($contents) && elgg_view_exists("icon/{$entity_type}/default")) {
580  $contents = elgg_view("icon/{$entity_type}/default", $vars);
581  }
582 
583  if (empty($contents)) {
584  $contents = elgg_view('icon/default', $vars);
585  }
586 
587  return $contents;
588 }
589 
606 function elgg_view_annotation(\ElggAnnotation $annotation, array $vars = []): string {
607  $defaults = [
608  'full_view' => true,
609  ];
610 
611  $vars = array_merge($defaults, $vars);
612  $vars['annotation'] = $annotation;
613 
614  $name = $annotation->name;
615  if (empty($name)) {
616  return '';
617  }
618 
619  $annotation_views = [
620  (string) elgg_extract('item_view', $vars, ''),
621  "annotation/{$name}",
622  'annotation/default',
623  ];
624 
625  foreach ($annotation_views as $view) {
626  if (elgg_view_exists($view)) {
627  return elgg_view($view, $vars);
628  }
629  }
630 
631  return '';
632 }
633 
659 function elgg_view_entity_list(array $entities, array $vars = []): string {
660  $offset = (int) get_input('offset', 0);
661 
662  // list type can be passed as request parameter
663  $list_type = get_input('list_type', 'list');
664 
665  $defaults = [
666  'items' => $entities,
667  'list_class' => 'elgg-list-entity',
668  'full_view' => true,
669  'pagination' => true,
670  'list_type' => $list_type,
671  'offset' => $offset,
672  'limit' => null,
673  ];
674 
675  $vars = array_merge($defaults, $vars);
676 
677  if (!$vars['limit'] && !$vars['offset']) {
678  // no need for pagination if listing is unlimited
679  $vars['pagination'] = false;
680  }
681 
682  $view = "page/components/{$vars['list_type']}";
683  if (!elgg_view_exists($view)) {
684  $view = 'page/components/list';
685  }
686 
687  return elgg_view($view, $vars);
688 }
689 
708 function elgg_view_annotation_list(array $annotations, array $vars = []): string {
709  // list type can be passed as request parameter
710  $list_type = get_input('list_type', 'list');
711 
712  $defaults = [
713  'items' => $annotations,
714  'offset' => null,
715  'limit' => null,
716  'list_class' => 'elgg-list-annotation',
717  'full_view' => true,
718  'list_type' => $list_type,
719  'offset_key' => 'annoff',
720  ];
721 
722  $vars = array_merge($defaults, $vars);
723 
724  if (!$vars['limit'] && !$vars['offset']) {
725  // no need for pagination if listing is unlimited
726  $vars['pagination'] = false;
727  }
728 
729  $view = "page/components/{$vars['list_type']}";
730  if (!elgg_view_exists($view)) {
731  $view = 'page/components/list';
732  }
733 
734  return elgg_view($view, $vars);
735 }
736 
755 function elgg_view_relationship_list(array $relationships, array $vars = []): string {
756  // list type can be passed as request parameter
757  $list_type = get_input('list_type', 'list');
758 
759  $defaults = [
760  'items' => $relationships,
761  'offset' => null,
762  'limit' => null,
763  'list_class' => 'elgg-list-relationship',
764  'full_view' => false,
765  'list_type' => $list_type,
766  'offset_key' => 'reloff',
767  ];
768 
769  $vars = array_merge($defaults, $vars);
770 
771  if (!$vars['limit'] && !$vars['offset']) {
772  // no need for pagination if listing is unlimited
773  $vars['pagination'] = false;
774  }
775 
776  $view = "page/components/{$vars['list_type']}";
777  if (!elgg_view_exists($view)) {
778  $view = 'page/components/list';
779  }
780 
781  return elgg_view($view, $vars);
782 }
783 
801  $defaults = [
802  'full_view' => true,
803  ];
804 
805  $vars = array_merge($defaults, $vars);
806  $vars['relationship'] = $relationship;
807 
808  $name = $relationship->relationship;
809  if (empty($name)) {
810  return '';
811  }
812 
813  $relationship_views = [
814  (string) elgg_extract('item_view', $vars, ''),
815  "relationship/{$name}",
816  'relationship/default',
817  ];
818 
819  foreach ($relationship_views as $view) {
820  if (elgg_view_exists($view)) {
821  return elgg_view($view, $vars);
822  }
823  }
824 
825  return '';
826 }
827 
838 function elgg_view_title(string $title, array $vars = []): string {
839  $vars['title'] = $title;
840 
841  return elgg_view('page/elements/title', $vars);
842 }
843 
855 function elgg_view_friendly_time($time, $time_updated = null): string {
856  $view = 'output/friendlytime';
857  $vars = [
858  'time' => $time,
859  'time_updated' => $time_updated,
860  ];
861  $viewtype = elgg_view_exists($view) ? '' : 'default';
862 
864 }
865 
879 function elgg_view_comments(\ElggEntity $entity, bool $add_comment = true, array $vars = []): string {
880  if (!$entity->hasCapability('commentable')) {
881  return '';
882  }
883 
884  $vars['entity'] = $entity;
885  $vars['show_add_form'] = $add_comment;
886  $vars['class'] = elgg_extract('class', $vars, "{$entity->getSubtype()}-comments");
887 
888  $default_id = 'comments';
889  if ($entity instanceof \ElggComment) {
890  $default_id .= "-{$entity->guid}";
891  }
892 
893  $vars['id'] = elgg_extract('id', $vars, $default_id);
894 
895  $output = elgg_trigger_event_results('comments', $entity->getType(), $vars, false);
896  if (is_string($output)) {
897  return $output;
898  }
899 
900  return elgg_view('page/elements/comments', $vars);
901 }
902 
921 function elgg_view_image_block(string $image, string $body, array $vars = []): string {
922  $vars['image'] = $image;
923  $vars['body'] = $body;
924  return elgg_view('page/components/image_block', $vars);
925 }
926 
942 function elgg_view_module(string $type, string $title, string $body, array $vars = []): string {
943  $vars['type'] = $type;
944  $vars['title'] = $title;
945  $vars['body'] = $body;
946  return elgg_view('page/components/module', $vars);
947 }
948 
963 function elgg_view_message(string $type, string $body, array $vars = []): string {
964  $vars['type'] = $type;
965  $vars['body'] = $body;
966  return elgg_view('page/components/message', $vars);
967 }
968 
978 function elgg_view_river_item(\ElggRiverItem $item, array $vars = []): string {
979 
980  // checking default viewtype since some viewtypes do not have unique views per item (rss)
981  $view = $item->getView();
982 
983  $subject = $item->getSubjectEntity();
984  $object = $item->getObjectEntity();
985  if (!$subject || !$object) {
986  // subject is disabled or subject/object deleted
987  return '';
988  }
989 
990  if (elgg_extract('register_rss_link', $vars)) {
992  }
993 
994  $vars['item'] = $item;
995 
996  // create river view logic
997  $type = $object->getType();
998  $subtype = $object->getSubtype();
999  $action = $item->action_type;
1000 
1001  $river_views = [
1002  elgg_extract('item_view', $vars, ''),
1003  'river/item', // important for other viewtypes, e.g. "rss"
1004  $view,
1005  "river/{$type}/{$subtype}/{$action}",
1006  "river/{$type}/{$subtype}/default",
1007  "river/{$type}/{$action}",
1008  "river/{$type}/default",
1009  'river/elements/layout',
1010  ];
1011 
1012  foreach ($river_views as $view) {
1013  if (elgg_view_exists($view)) {
1014  return elgg_view($view, $vars);
1015  }
1016  }
1017 
1018  return '';
1019 }
1020 
1056 function elgg_view_form(string $action, array $form_vars = [], array $body_vars = []): string {
1057  return _elgg_services()->forms->render($action, $form_vars, $body_vars);
1058 }
1059 
1092 function elgg_view_entity_form(string $entity_type, string $entity_subtype, ?\ElggEntity $entity = null, array $vars = []): string {
1093  return _elgg_services()->forms->renderEntity($entity_type, $entity_subtype, $entity, $vars);
1094 }
1095 
1105 function elgg_set_form_footer(string $footer = ''): void {
1106  _elgg_services()->forms->setFooter($footer);
1107 }
1108 
1113 function elgg_get_form_footer(): string {
1114  return _elgg_services()->forms->getFooter();
1115 }
1116 
1127 function _elgg_split_vars(array $vars = []): array {
1128  $return = [
1129  '' => [],
1130  '#' => [],
1131  ];
1132 
1133  foreach ($vars as $key => $value) {
1134  if (str_starts_with($key, '#')) {
1135  $key = substr($key, 1);
1136  $return['#'][$key] = $value;
1137  } else {
1138  $return[''][$key] = $value;
1139  }
1140  }
1141 
1142  return $return;
1143 }
1144 
1164 function elgg_view_field(array $params = []): string {
1165 
1166  if (isset($params['#html'])) {
1167  return (string) $params['#html'];
1168  }
1169 
1170  if (empty($params['#type'])) {
1171  _elgg_services()->logger->error(__FUNCTION__ . '(): $params["#type"] is required.');
1172  return '';
1173  }
1174 
1175  $input_type = $params['#type'];
1176  if (!elgg_view_exists("input/{$input_type}")) {
1177  return '';
1178  }
1179 
1180  $hidden_types = ['hidden', 'securitytoken'];
1181  if (in_array($input_type, $hidden_types)) {
1183  return elgg_view("input/{$input_type}", $params['']);
1184  }
1185 
1186  if (empty($params['id'])) {
1187  $params['id'] = 'elgg-field-' . base_convert(mt_rand(), 10, 36);
1188  }
1189 
1190  $make_special_checkbox_label = false;
1191  if (in_array($input_type, ['checkbox', 'switch']) && (isset($params['label']) || isset($params['#label']))) {
1192  if (isset($params['#label']) && isset($params['label'])) {
1193  $params['label_tag'] = 'div';
1194  } else {
1195  $label = elgg_extract('label', $params);
1196  $label = elgg_extract('#label', $params, $label);
1197 
1198  $params['#label'] = $label;
1199  unset($params['label']);
1200 
1201  // Single checkbox input view gets special treatment
1202  // We don't want the field label to appear a checkbox without a label
1203  $make_special_checkbox_label = true;
1204  }
1205  }
1206 
1207  // Need to set defaults to prevent input keys with same name ending up in element vars if not provided
1208  $defaults = [
1209  '#class' => ELGG_ENTITIES_ANY_VALUE,
1210  '#help' => ELGG_ENTITIES_ANY_VALUE,
1211  '#label' => ELGG_ENTITIES_ANY_VALUE,
1212  '#view' => ELGG_ENTITIES_ANY_VALUE,
1213  ];
1214  $params = array_merge($defaults, $params);
1215 
1216  // first pass non-hash keys into both
1217  $split_params = _elgg_split_vars($params);
1218 
1219  // $vars passed to input/$input_name
1220  $input_vars = $split_params[''];
1221 
1222  // $vars passed to label, help and field wrapper views
1223  $element_vars = array_merge($split_params[''], $split_params['#']);
1224 
1225  // field input view needs this
1226  $input_vars['input_type'] = $input_type;
1227 
1228  // field views get more data
1229  $element_vars['input_type'] = $input_type;
1230 
1231  // correct the label vars
1232  $label_vars = $element_vars;
1233  if (in_array($input_type, ['checkboxes', 'radio'])) {
1234  // the field label shouldn't point to the wrapping <ul> as that isn't a valid target for a <label>
1235  unset($label_vars['id']);
1236  }
1237 
1238  $element_vars['label'] = elgg_view('elements/forms/label', $label_vars);
1239  $element_vars['help'] = elgg_view('elements/forms/help', $element_vars);
1240 
1241  if ($make_special_checkbox_label) {
1242  $input_vars['label'] = $element_vars['label'];
1243  $input_vars['label_tag'] = 'div';
1244  unset($element_vars['label']);
1245  }
1246 
1247  $element_vars['input'] = elgg_view('elements/forms/input', $input_vars);
1248 
1249  return elgg_view('elements/forms/field', $element_vars);
1250 }
1251 
1264 function elgg_view_tagcloud(array $options = []): string {
1265  return elgg_view('output/tagcloud', [
1266  'value' => elgg_get_tags($options),
1267  'type' => elgg_extract('type', $options, ''),
1268  'subtype' => elgg_extract('subtype', $options, ''),
1269  ]);
1270 }
1271 
1282 function elgg_view_list_item($item, array $vars = []): string {
1283 
1284  if ($item instanceof \ElggEntity) {
1285  return elgg_view_entity($item, $vars);
1286  } else if ($item instanceof \ElggAnnotation) {
1287  return elgg_view_annotation($item, $vars);
1288  } else if ($item instanceof \ElggRiverItem) {
1289  return elgg_view_river_item($item, $vars);
1290  } else if ($item instanceof ElggRelationship) {
1292  }
1293 
1294  $view = (string) elgg_extract('item_view', $vars);
1295  if ($view && elgg_view_exists($view)) {
1296  $vars['item'] = $item;
1297  return elgg_view($view, $vars);
1298  }
1299 
1300  return '';
1301 }
1302 
1311 function elgg_view_icon(string $name, array $vars = []): string {
1312  $vars['class'] = elgg_extract_class($vars, "elgg-icon-{$name}");
1313 
1314  return elgg_view('output/icon', $vars);
1315 }
1316 
1322 function elgg_register_rss_link(): void {
1323  _elgg_services()->config->_elgg_autofeed = true;
1324 }
1325 
1331 function elgg_unregister_rss_link(): void {
1332  _elgg_services()->config->_elgg_autofeed = false;
1333 }
1334 
1341 function _elgg_has_rss_link(): bool {
1342  if (_elgg_services()->config->disable_rss) {
1343  return false;
1344  }
1345 
1346  return (bool) _elgg_services()->config->_elgg_autofeed;
1347 }
1348 
1356 function elgg_views_boot(): void {
1357  _elgg_services()->views->registerCoreViews();
1358 
1359  elgg_register_external_file('css', 'font-awesome', elgg_get_simplecache_url('font-awesome/css/all.min.css'));
1360  elgg_load_external_file('css', 'font-awesome');
1361 
1362  elgg_extend_view('elgg.css', 'lightbox/elgg-colorbox-theme/colorbox.css');
1363  elgg_extend_view('elgg.css', 'entity/edit/icon/crop.css');
1364 
1365  elgg_require_css('elgg');
1366 
1367  elgg_register_esm('cropperjs', elgg_get_simplecache_url('cropperjs/cropper.esm.js'));
1368  elgg_register_esm('jquery', elgg_get_simplecache_url('elgg/jquery.mjs'));
1369  elgg_register_esm('jquery-ui', elgg_get_simplecache_url('jquery-ui.js'));
1370  elgg_register_esm('jquery-cropper/jquery-cropper', elgg_get_simplecache_url('jquery-cropper/jquery-cropper.esm.js'));
1371 
1372  elgg_import_esm('elgg');
1373  elgg_import_esm('elgg/lightbox');
1374  elgg_import_esm('elgg/security');
1375 
1376  elgg_extend_view('jquery-ui.js', 'jquery.ui.touch-punch.js');
1377  elgg_extend_view('initialize_elgg.js', 'elgg/prevent_clicks.js', 1);
1378 
1379  elgg_register_ajax_view('languages.js');
1380 }
1381 
1390 function _elgg_get_js_page_data(array $params = []): array {
1391  $data = elgg_trigger_event_results('elgg.data', 'page', $params, []);
1392  if (!is_array($data)) {
1393  _elgg_services()->logger->error('"elgg.data" Event handlers must return an array. Returned ' . gettype($data) . '.');
1394  $data = [];
1395  }
1396 
1397  $message_delay = (int) elgg_get_config('message_delay');
1398  if ($message_delay < 1) {
1399  $message_delay = 6;
1400  }
1401 
1402  $elgg = [
1403  'config' => [
1404  'lastcache' => (int) _elgg_services()->config->lastcache,
1405  'viewtype' => elgg_get_viewtype(),
1406  'simplecache_enabled' => (int) _elgg_services()->simpleCache->isEnabled(),
1407  'current_language' => elgg_get_current_language(),
1408  'language' => _elgg_services()->config->language ?: 'en',
1409  'wwwroot' => elgg_get_site_url(),
1410  'message_delay' => $message_delay * 1000,
1411  ],
1412  'release' => elgg_get_release(),
1413  'security' => [
1414  // refresh token 3 times during its lifetime (in microseconds 1000 * 1/3)
1415  'interval' => (int) _elgg_services()->csrf->getActionTokenTimeout() * 333,
1416 
1417  'token' => [
1418  '__elgg_ts' => $ts = _elgg_services()->csrf->getCurrentTime()->getTimestamp(),
1419  '__elgg_token' => _elgg_services()->csrf->generateActionToken($ts),
1420  ],
1421  ],
1422  'session' => [
1423  'user' => null,
1424  'token' => _elgg_services()->session->get('__elgg_session'),
1425  ],
1426  'data' => $data,
1427  ];
1428 
1430  if ($user instanceof ElggUser) {
1431  $user_object = $user->toObject();
1432  $user_object->admin = $user->isAdmin();
1433 
1434  $elgg['user'] = (array) $user_object;
1435  }
1436 
1437  return $elgg;
1438 }
1439 
1451 function _elgg_view_under_viewtype(string $view, array $vars, string $viewtype): string {
1452  $current_view_type = null;
1453  if ($viewtype) {
1454  $current_view_type = elgg_get_viewtype();
1456  }
1457 
1458  $ret = elgg_view($view, $vars);
1459 
1460  if (isset($current_view_type)) {
1461  elgg_set_viewtype($current_view_type);
1462  }
1463 
1464  return $ret;
1465 }
1466 
1477 function elgg_view_url(string $href, ?string $text = null, array $options = []): string {
1478  $options['is_trusted'] = elgg_extract('is_trusted', $options, true);
1479  $options['href'] = $href;
1480  $options['text'] = $text;
1481 
1482  return elgg_view('output/url', $options);
1483 }
1484 
1494 function elgg_view_entity_url(\ElggEntity $entity, array $options = []): string {
1495  return elgg_view_url($entity->getURL(), $entity->getDisplayName(), $options);
1496 }
1497 
1510 function elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version): string {
1511  return _elgg_services()->views->renderDeprecatedView($view, $vars, $suggestion, $version);
1512 }
1513 
1522 function elgg_view_no_results(string $text = ''): string {
1523  if (elgg_is_empty($text)) {
1524  $text = true;
1525  }
1526 
1527  return elgg_view('page/components/no_results', [
1528  'no_results' => $text,
1529  ]);
1530 }
$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.
if(count($css_vars)< 2) $options
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
$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_deprecated_notice(string $msg, string $dep_version)
Log a notice about deprecated use of a function, view, etc.
Definition: elgglib.php:107
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:273
_elgg_services()
Get the global service provider.
Definition: elgglib.php:347
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.
$entity_subtype
Definition: edit.php:15
$entity_type
Generic entity edit/add form.
Definition: edit.php:14
$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:565
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:800
elgg_view_comments(\ElggEntity $entity, bool $add_comment=true, array $vars=[])
Returns rendered comments and a comment form for an entity.
Definition: views.php:879
_elgg_has_rss_link()
Should the RSS view of this URL be linked to?
Definition: views.php:1341
elgg_view_icon(string $name, array $vars=[])
View an icon glyph.
Definition: views.php:1311
elgg_view_module(string $type, string $title, string $body, array $vars=[])
Wrapper function for the module display pattern.
Definition: views.php:942
elgg_view_no_results(string $text='')
Helper function to display a no results view.
Definition: views.php:1522
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:1264
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:1331
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:606
_elgg_get_js_page_data(array $params=[])
Get the initial contents of "elgg" client side.
Definition: views.php:1390
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:1127
elgg_view_annotation_list(array $annotations, array $vars=[])
Returns a rendered list of annotations, plus pagination.
Definition: views.php:708
elgg_view_field(array $params=[])
Renders a form field, usually with a wrapper element, a label, help text, etc.
Definition: views.php:1164
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:1356
elgg_view_list_item($item, array $vars=[])
View an item in a list.
Definition: views.php:1282
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:1105
elgg_view_entity_url(\ElggEntity $entity, array $options=[])
Helper function for outputting a link to an entity.
Definition: views.php:1494
elgg_get_form_footer()
Returns currently set footer, or false if not in the form rendering stack.
Definition: views.php:1113
_elgg_view_under_viewtype(string $view, array $vars, string $viewtype)
Render a view while the global viewtype is temporarily changed.
Definition: views.php:1451
elgg_view_image_block(string $image, string $body, array $vars=[])
Wrapper function for the image block display pattern.
Definition: views.php:921
elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version)
Display a view with a deprecation notice.
Definition: views.php:1510
elgg_view_river_item(\ElggRiverItem $item, array $vars=[])
Renders a human-readable representation of a river item.
Definition: views.php:978
elgg_view_message(string $type, string $body, array $vars=[])
Wrapper function for the message display pattern.
Definition: views.php:963
elgg_view_menu($menu, array $vars=[])
Render a menu.
Definition: views.php:454
elgg_view_entity(\ElggEntity $entity, array $vars=[])
Returns a string of a rendered entity.
Definition: views.php:513
elgg_view_form(string $action, array $form_vars=[], array $body_vars=[])
Definition: views.php:1056
elgg_view_layout(string $layout_name, array $vars=[])
Displays a layout with optional parameters.
Definition: views.php:365
elgg_view_entity_form(string $entity_type, string $entity_subtype, ?\ElggEntity $entity=null, array $vars=[])
Render an entity edit/add form.
Definition: views.php:1092
elgg_view_relationship_list(array $relationships, array $vars=[])
Returns a rendered list of relationships, plus pagination.
Definition: views.php:755
elgg_view_resource(string $name, array $vars=[])
Render a resource view.
Definition: views.php:320
elgg_view_friendly_time($time, $time_updated=null)
Displays a UNIX timestamp in a friendly way.
Definition: views.php:855
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:659
elgg_register_rss_link()
Include the RSS icon link and link element in the head.
Definition: views.php:1322
elgg_view_title(string $title, array $vars=[])
Renders a title.
Definition: views.php:838
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:1477
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/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:43