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  $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  $menu_view = (string) elgg_extract('menu_view', $vars);
451  unset($vars['menu_view']);
452 
453  if (isset($vars['prepare_vertical'])) {
454  $menu_name = is_string($menu) ? $menu : '';
455  elgg_deprecated_notice("Replace 'prepare_vertical' with 'prepare_toggle' when using 'elgg_view_menu('{$menu_name}')'", '7.1');
456 
457  $vars['prepare_toggle'] = elgg_extract('prepare_toggle', $vars, $vars['prepare_vertical']);
458  unset($vars['prepare_vertical']);
459  }
460 
461  if (is_string($menu)) {
462  $menu = _elgg_services()->menus->getMenu($menu, $vars);
463  } elseif ($menu instanceof UnpreparedMenu) {
464  $menu = _elgg_services()->menus->prepareMenu($menu);
465  }
466 
467  if (!$menu instanceof Menu) {
468  throw new ElggInvalidArgumentException('$menu must be a menu name, a Menu, or UnpreparedMenu');
469  }
470 
471  $name = $menu->getName();
472  $params = $menu->getParams();
473 
474  $views = [
475  $menu_view,
476  "navigation/menu/{$name}",
477  'navigation/menu/default',
478  ];
479 
480  foreach ($views as $view) {
481  if (elgg_view_exists($view)) {
482  return elgg_view($view, $params);
483  }
484  }
485 
486  return '';
487 }
488 
508 function elgg_view_entity(\ElggEntity $entity, array $vars = []): string {
509 
510  $defaults = [
511  'full_view' => true,
512  ];
513 
514  $vars = array_merge($defaults, $vars);
515 
516  if (elgg_extract('register_rss_link', $vars, $vars['full_view'])) {
518  }
519 
520  $vars['entity'] = $entity;
521 
522  $entity_type = $entity->getType();
523  $entity_subtype = $entity->getSubtype();
524 
525  $subview = $vars['full_view'] ? 'full' : 'summary';
526 
527  $entity_views = [
528  (string) elgg_extract('item_view', $vars, ''),
529  "{$entity_type}/{$entity_subtype}/{$subview}",
530  "{$entity_type}/{$entity_subtype}",
531  "{$entity_type}/default",
532  ];
533 
534  $contents = '';
535  foreach ($entity_views as $view) {
536  if (elgg_view_exists($view)) {
538  break;
539  }
540  }
541 
542  return $contents;
543 }
544 
560 function elgg_view_entity_icon(\ElggEntity $entity, string $size = 'medium', array $vars = []): string {
561 
562  $vars['entity'] = $entity;
563  $vars['size'] = $size;
564 
565  $entity_type = $entity->getType();
566 
567  $subtype = $entity->getSubtype();
568 
569  $contents = '';
570  if (elgg_view_exists("icon/{$entity_type}/{$subtype}")) {
571  $contents = elgg_view("icon/{$entity_type}/{$subtype}", $vars);
572  }
573 
574  if (empty($contents) && elgg_view_exists("icon/{$entity_type}/default")) {
575  $contents = elgg_view("icon/{$entity_type}/default", $vars);
576  }
577 
578  if (empty($contents)) {
579  $contents = elgg_view('icon/default', $vars);
580  }
581 
582  return $contents;
583 }
584 
601 function elgg_view_annotation(\ElggAnnotation $annotation, array $vars = []): string {
602  $defaults = [
603  'full_view' => true,
604  ];
605 
606  $vars = array_merge($defaults, $vars);
607  $vars['annotation'] = $annotation;
608 
609  $name = $annotation->name;
610  if (empty($name)) {
611  return '';
612  }
613 
614  $annotation_views = [
615  (string) elgg_extract('item_view', $vars, ''),
616  "annotation/{$name}",
617  'annotation/default',
618  ];
619 
620  foreach ($annotation_views as $view) {
621  if (elgg_view_exists($view)) {
622  return elgg_view($view, $vars);
623  }
624  }
625 
626  return '';
627 }
628 
654 function elgg_view_entity_list(array $entities, array $vars = []): string {
655  $offset = (int) get_input('offset', 0);
656 
657  // list type can be passed as request parameter
658  $list_type = get_input('list_type', 'list');
659 
660  $defaults = [
661  'items' => $entities,
662  'list_class' => 'elgg-list-entity',
663  'full_view' => true,
664  'pagination' => true,
665  'list_type' => $list_type,
666  'offset' => $offset,
667  'limit' => null,
668  ];
669 
670  $vars = array_merge($defaults, $vars);
671 
672  if (!$vars['limit'] && !$vars['offset']) {
673  // no need for pagination if listing is unlimited
674  $vars['pagination'] = false;
675  }
676 
677  $view = "page/components/{$vars['list_type']}";
678  if (!elgg_view_exists($view)) {
679  $view = 'page/components/list';
680  }
681 
682  return elgg_view($view, $vars);
683 }
684 
703 function elgg_view_annotation_list(array $annotations, array $vars = []): string {
704  // list type can be passed as request parameter
705  $list_type = get_input('list_type', 'list');
706 
707  $defaults = [
708  'items' => $annotations,
709  'offset' => null,
710  'limit' => null,
711  'list_class' => 'elgg-list-annotation',
712  'full_view' => true,
713  'list_type' => $list_type,
714  'offset_key' => 'annoff',
715  ];
716 
717  $vars = array_merge($defaults, $vars);
718 
719  if (!$vars['limit'] && !$vars['offset']) {
720  // no need for pagination if listing is unlimited
721  $vars['pagination'] = false;
722  }
723 
724  $view = "page/components/{$vars['list_type']}";
725  if (!elgg_view_exists($view)) {
726  $view = 'page/components/list';
727  }
728 
729  return elgg_view($view, $vars);
730 }
731 
750 function elgg_view_relationship_list(array $relationships, array $vars = []): string {
751  // list type can be passed as request parameter
752  $list_type = get_input('list_type', 'list');
753 
754  $defaults = [
755  'items' => $relationships,
756  'offset' => null,
757  'limit' => null,
758  'list_class' => 'elgg-list-relationship',
759  'full_view' => false,
760  'list_type' => $list_type,
761  'offset_key' => 'reloff',
762  ];
763 
764  $vars = array_merge($defaults, $vars);
765 
766  if (!$vars['limit'] && !$vars['offset']) {
767  // no need for pagination if listing is unlimited
768  $vars['pagination'] = false;
769  }
770 
771  $view = "page/components/{$vars['list_type']}";
772  if (!elgg_view_exists($view)) {
773  $view = 'page/components/list';
774  }
775 
776  return elgg_view($view, $vars);
777 }
778 
796  $defaults = [
797  'full_view' => true,
798  ];
799 
800  $vars = array_merge($defaults, $vars);
801  $vars['relationship'] = $relationship;
802 
803  $name = $relationship->relationship;
804  if (empty($name)) {
805  return '';
806  }
807 
808  $relationship_views = [
809  (string) elgg_extract('item_view', $vars, ''),
810  "relationship/{$name}",
811  'relationship/default',
812  ];
813 
814  foreach ($relationship_views as $view) {
815  if (elgg_view_exists($view)) {
816  return elgg_view($view, $vars);
817  }
818  }
819 
820  return '';
821 }
822 
833 function elgg_view_title(string $title, array $vars = []): string {
834  $vars['title'] = $title;
835 
836  return elgg_view('page/elements/title', $vars);
837 }
838 
850 function elgg_view_friendly_time($time, $time_updated = null): string {
851  $view = 'output/friendlytime';
852  $vars = [
853  'time' => $time,
854  'time_updated' => $time_updated,
855  ];
856  $viewtype = elgg_view_exists($view) ? '' : 'default';
857 
859 }
860 
874 function elgg_view_comments(\ElggEntity $entity, bool $add_comment = true, array $vars = []): string {
875  if (!$entity->hasCapability('commentable')) {
876  return '';
877  }
878 
879  $vars['entity'] = $entity;
880  $vars['show_add_form'] = $add_comment;
881  $vars['class'] = elgg_extract('class', $vars, "{$entity->getSubtype()}-comments");
882 
883  $default_id = 'comments';
884  if ($entity instanceof \ElggComment) {
885  $default_id .= "-{$entity->guid}";
886  }
887 
888  $vars['id'] = elgg_extract('id', $vars, $default_id);
889 
890  $output = elgg_trigger_event_results('comments', $entity->getType(), $vars, false);
891  if (is_string($output)) {
892  return $output;
893  }
894 
895  return elgg_view('page/elements/comments', $vars);
896 }
897 
916 function elgg_view_image_block(string $image, string $body, array $vars = []): string {
917  $vars['image'] = $image;
918  $vars['body'] = $body;
919  return elgg_view('page/components/image_block', $vars);
920 }
921 
937 function elgg_view_module(string $type, string $title, string $body, array $vars = []): string {
938  $vars['type'] = $type;
939  $vars['title'] = $title;
940  $vars['body'] = $body;
941  return elgg_view('page/components/module', $vars);
942 }
943 
958 function elgg_view_message(string $type, string $body, array $vars = []): string {
959  $vars['type'] = $type;
960  $vars['body'] = $body;
961  return elgg_view('page/components/message', $vars);
962 }
963 
973 function elgg_view_river_item(\ElggRiverItem $item, array $vars = []): string {
974 
975  // checking default viewtype since some viewtypes do not have unique views per item (rss)
976  $view = $item->getView();
977 
978  $subject = $item->getSubjectEntity();
979  $object = $item->getObjectEntity();
980  if (!$subject || !$object) {
981  // subject is disabled or subject/object deleted
982  return '';
983  }
984 
985  if (elgg_extract('register_rss_link', $vars)) {
987  }
988 
989  $vars['item'] = $item;
990 
991  // create river view logic
992  $type = $object->getType();
993  $subtype = $object->getSubtype();
994  $action = $item->action_type;
995 
996  $river_views = [
997  elgg_extract('item_view', $vars, ''),
998  'river/item', // important for other viewtypes, e.g. "rss"
999  $view,
1000  "river/{$type}/{$subtype}/{$action}",
1001  "river/{$type}/{$subtype}/default",
1002  "river/{$type}/{$action}",
1003  "river/{$type}/default",
1004  'river/elements/layout',
1005  ];
1006 
1007  foreach ($river_views as $view) {
1008  if (elgg_view_exists($view)) {
1009  return elgg_view($view, $vars);
1010  }
1011  }
1012 
1013  return '';
1014 }
1015 
1051 function elgg_view_form(string $action, array $form_vars = [], array $body_vars = []): string {
1052  return _elgg_services()->forms->render($action, $form_vars, $body_vars);
1053 }
1054 
1087 function elgg_view_entity_form(string $entity_type, string $entity_subtype, ?\ElggEntity $entity = null, array $vars = []): string {
1088  return _elgg_services()->forms->renderEntity($entity_type, $entity_subtype, $entity, $vars);
1089 }
1090 
1100 function elgg_set_form_footer(string $footer = ''): void {
1101  _elgg_services()->forms->setFooter($footer);
1102 }
1103 
1108 function elgg_get_form_footer(): string {
1109  return _elgg_services()->forms->getFooter();
1110 }
1111 
1122 function _elgg_split_vars(array $vars = []): array {
1123  $return = [
1124  '' => [],
1125  '#' => [],
1126  ];
1127 
1128  foreach ($vars as $key => $value) {
1129  if (str_starts_with($key, '#')) {
1130  $key = substr($key, 1);
1131  $return['#'][$key] = $value;
1132  } else {
1133  $return[''][$key] = $value;
1134  }
1135  }
1136 
1137  return $return;
1138 }
1139 
1159 function elgg_view_field(array $params = []): string {
1160 
1161  if (isset($params['#html'])) {
1162  return (string) $params['#html'];
1163  }
1164 
1165  if (empty($params['#type'])) {
1166  _elgg_services()->logger->error(__FUNCTION__ . '(): $params["#type"] is required.');
1167  return '';
1168  }
1169 
1170  $input_type = $params['#type'];
1171  if (!elgg_view_exists("input/{$input_type}")) {
1172  return '';
1173  }
1174 
1175  $hidden_types = ['hidden', 'securitytoken'];
1176  if (in_array($input_type, $hidden_types)) {
1178  return elgg_view("input/{$input_type}", $params['']);
1179  }
1180 
1181  if (empty($params['id'])) {
1182  $params['id'] = 'elgg-field-' . base_convert(mt_rand(), 10, 36);
1183  }
1184 
1185  $make_special_checkbox_label = false;
1186  if (in_array($input_type, ['checkbox', 'switch']) && (isset($params['label']) || isset($params['#label']))) {
1187  if (isset($params['#label']) && isset($params['label'])) {
1188  $params['label_tag'] = 'div';
1189  } else {
1190  $label = elgg_extract('label', $params);
1191  $label = elgg_extract('#label', $params, $label);
1192 
1193  $params['#label'] = $label;
1194  unset($params['label']);
1195 
1196  // Single checkbox input view gets special treatment
1197  // We don't want the field label to appear a checkbox without a label
1198  $make_special_checkbox_label = true;
1199  }
1200  }
1201 
1202  // Need to set defaults to prevent input keys with same name ending up in element vars if not provided
1203  $defaults = [
1204  '#class' => ELGG_ENTITIES_ANY_VALUE,
1205  '#help' => ELGG_ENTITIES_ANY_VALUE,
1206  '#label' => ELGG_ENTITIES_ANY_VALUE,
1207  '#view' => ELGG_ENTITIES_ANY_VALUE,
1208  ];
1209  $params = array_merge($defaults, $params);
1210 
1211  // first pass non-hash keys into both
1212  $split_params = _elgg_split_vars($params);
1213 
1214  // $vars passed to input/$input_name
1215  $input_vars = $split_params[''];
1216 
1217  // $vars passed to label, help and field wrapper views
1218  $element_vars = array_merge($split_params[''], $split_params['#']);
1219 
1220  // field input view needs this
1221  $input_vars['input_type'] = $input_type;
1222 
1223  // field views get more data
1224  $element_vars['input_type'] = $input_type;
1225 
1226  // correct the label vars
1227  $label_vars = $element_vars;
1228  if (in_array($input_type, ['checkboxes', 'radio'])) {
1229  // the field label shouldn't point to the wrapping <ul> as that isn't a valid target for a <label>
1230  unset($label_vars['id']);
1231  }
1232 
1233  $element_vars['label'] = elgg_view('elements/forms/label', $label_vars);
1234  $element_vars['help'] = elgg_view('elements/forms/help', $element_vars);
1235 
1236  if ($make_special_checkbox_label) {
1237  $input_vars['label'] = $element_vars['label'];
1238  $input_vars['label_tag'] = 'div';
1239  unset($element_vars['label']);
1240  }
1241 
1242  $element_vars['input'] = elgg_view('elements/forms/input', $input_vars);
1243 
1244  return elgg_view('elements/forms/field', $element_vars);
1245 }
1246 
1259 function elgg_view_tagcloud(array $options = []): string {
1260  return elgg_view('output/tagcloud', [
1261  'value' => elgg_get_tags($options),
1262  'type' => elgg_extract('type', $options, ''),
1263  'subtype' => elgg_extract('subtype', $options, ''),
1264  ]);
1265 }
1266 
1277 function elgg_view_list_item($item, array $vars = []): string {
1278 
1279  if ($item instanceof \ElggEntity) {
1280  return elgg_view_entity($item, $vars);
1281  } else if ($item instanceof \ElggAnnotation) {
1282  return elgg_view_annotation($item, $vars);
1283  } else if ($item instanceof \ElggRiverItem) {
1284  return elgg_view_river_item($item, $vars);
1285  } else if ($item instanceof ElggRelationship) {
1287  }
1288 
1289  $view = (string) elgg_extract('item_view', $vars);
1290  if ($view && elgg_view_exists($view)) {
1291  $vars['item'] = $item;
1292  return elgg_view($view, $vars);
1293  }
1294 
1295  return '';
1296 }
1297 
1306 function elgg_view_icon(string $name, array $vars = []): string {
1307  $vars['class'] = elgg_extract_class($vars, "elgg-icon-{$name}");
1308 
1309  return elgg_view('output/icon', $vars);
1310 }
1311 
1317 function elgg_register_rss_link(): void {
1318  _elgg_services()->config->_elgg_autofeed = true;
1319 }
1320 
1326 function elgg_unregister_rss_link(): void {
1327  _elgg_services()->config->_elgg_autofeed = false;
1328 }
1329 
1336 function _elgg_has_rss_link(): bool {
1337  if (_elgg_services()->config->disable_rss) {
1338  return false;
1339  }
1340 
1341  return (bool) _elgg_services()->config->_elgg_autofeed;
1342 }
1343 
1351 function elgg_views_boot(): void {
1352  _elgg_services()->views->registerCoreViews();
1353 
1354  elgg_register_external_file('css', 'font-awesome', elgg_get_simplecache_url('font-awesome/css/all.min.css'));
1355  elgg_load_external_file('css', 'font-awesome');
1356 
1357  elgg_extend_view('elgg.css', 'lightbox/elgg-colorbox-theme/colorbox.css');
1358  elgg_extend_view('elgg.css', 'entity/edit/icon/crop.css');
1359 
1360  elgg_require_css('elgg');
1361 
1362  elgg_register_esm('cropperjs', elgg_get_simplecache_url('cropperjs/cropper.esm.js'));
1363  elgg_register_esm('jquery', elgg_get_simplecache_url('elgg/jquery.mjs'));
1364  elgg_register_esm('jquery-ui', elgg_get_simplecache_url('jquery-ui.js'));
1365  elgg_register_esm('jquery-cropper/jquery-cropper', elgg_get_simplecache_url('jquery-cropper/jquery-cropper.esm.js'));
1366 
1367  elgg_import_esm('elgg');
1368  elgg_import_esm('elgg/lightbox');
1369  elgg_import_esm('elgg/security');
1370 
1371  elgg_extend_view('jquery-ui.js', 'jquery.ui.touch-punch.js');
1372  elgg_extend_view('initialize_elgg.js', 'elgg/prevent_clicks.js', 1);
1373 
1374  elgg_register_ajax_view('languages.js');
1375 }
1376 
1385 function _elgg_get_js_page_data(array $params = []): array {
1386  $data = elgg_trigger_event_results('elgg.data', 'page', $params, []);
1387  if (!is_array($data)) {
1388  _elgg_services()->logger->error('"elgg.data" Event handlers must return an array. Returned ' . gettype($data) . '.');
1389  $data = [];
1390  }
1391 
1392  $message_delay = (int) elgg_get_config('message_delay');
1393  if ($message_delay < 1) {
1394  $message_delay = 6;
1395  }
1396 
1397  $elgg = [
1398  'config' => [
1399  'lastcache' => (int) _elgg_services()->config->lastcache,
1400  'viewtype' => elgg_get_viewtype(),
1401  'simplecache_enabled' => (int) _elgg_services()->simpleCache->isEnabled(),
1402  'current_language' => elgg_get_current_language(),
1403  'language' => _elgg_services()->config->language ?: 'en',
1404  'wwwroot' => elgg_get_site_url(),
1405  'message_delay' => $message_delay * 1000,
1406  ],
1407  'release' => elgg_get_release(),
1408  'security' => [
1409  // refresh token 3 times during its lifetime (in microseconds 1000 * 1/3)
1410  'interval' => (int) _elgg_services()->csrf->getActionTokenTimeout() * 333,
1411 
1412  'token' => [
1413  '__elgg_ts' => $ts = _elgg_services()->csrf->getCurrentTime()->getTimestamp(),
1414  '__elgg_token' => _elgg_services()->csrf->generateActionToken($ts),
1415  ],
1416  ],
1417  'session' => [
1418  'user' => null,
1419  'token' => _elgg_services()->session->get('__elgg_session'),
1420  ],
1421  'data' => $data,
1422  ];
1423 
1425  if ($user instanceof ElggUser) {
1426  $user_object = $user->toObject();
1427  $user_object->admin = $user->isAdmin();
1428 
1429  $elgg['user'] = (array) $user_object;
1430  }
1431 
1432  return $elgg;
1433 }
1434 
1446 function _elgg_view_under_viewtype(string $view, array $vars, string $viewtype): string {
1447  $current_view_type = null;
1448  if ($viewtype) {
1449  $current_view_type = elgg_get_viewtype();
1451  }
1452 
1453  $ret = elgg_view($view, $vars);
1454 
1455  if (isset($current_view_type)) {
1456  elgg_set_viewtype($current_view_type);
1457  }
1458 
1459  return $ret;
1460 }
1461 
1472 function elgg_view_url(string $href, ?string $text = null, array $options = []): string {
1473  $options['is_trusted'] = elgg_extract('is_trusted', $options, true);
1474  $options['href'] = $href;
1475  $options['text'] = $text;
1476 
1477  return elgg_view('output/url', $options);
1478 }
1479 
1489 function elgg_view_entity_url(\ElggEntity $entity, array $options = []): string {
1490  return elgg_view_url($entity->getURL(), $entity->getDisplayName(), $options);
1491 }
1492 
1505 function elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version): string {
1506  return _elgg_services()->views->renderDeprecatedView($view, $vars, $suggestion, $version);
1507 }
1508 
1517 function elgg_view_no_results(string $text = ''): string {
1518  if (elgg_is_empty($text)) {
1519  $text = true;
1520  }
1521 
1522  return elgg_view('page/components/no_results', [
1523  'no_results' => $text,
1524  ]);
1525 }
$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:560
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:795
elgg_view_comments(\ElggEntity $entity, bool $add_comment=true, array $vars=[])
Returns rendered comments and a comment form for an entity.
Definition: views.php:874
_elgg_has_rss_link()
Should the RSS view of this URL be linked to?
Definition: views.php:1336
elgg_view_icon(string $name, array $vars=[])
View an icon glyph.
Definition: views.php:1306
elgg_view_module(string $type, string $title, string $body, array $vars=[])
Wrapper function for the module display pattern.
Definition: views.php:937
elgg_view_no_results(string $text='')
Helper function to display a no results view.
Definition: views.php:1517
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:1259
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:1326
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:601
_elgg_get_js_page_data(array $params=[])
Get the initial contents of "elgg" client side.
Definition: views.php:1385
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:1122
elgg_view_annotation_list(array $annotations, array $vars=[])
Returns a rendered list of annotations, plus pagination.
Definition: views.php:703
elgg_view_field(array $params=[])
Renders a form field, usually with a wrapper element, a label, help text, etc.
Definition: views.php:1159
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:1351
elgg_view_list_item($item, array $vars=[])
View an item in a list.
Definition: views.php:1277
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:1100
elgg_view_entity_url(\ElggEntity $entity, array $options=[])
Helper function for outputting a link to an entity.
Definition: views.php:1489
elgg_get_form_footer()
Returns currently set footer, or false if not in the form rendering stack.
Definition: views.php:1108
_elgg_view_under_viewtype(string $view, array $vars, string $viewtype)
Render a view while the global viewtype is temporarily changed.
Definition: views.php:1446
elgg_view_image_block(string $image, string $body, array $vars=[])
Wrapper function for the image block display pattern.
Definition: views.php:916
elgg_view_deprecated(string $view, array $vars, string $suggestion, string $version)
Display a view with a deprecation notice.
Definition: views.php:1505
elgg_view_river_item(\ElggRiverItem $item, array $vars=[])
Renders a human-readable representation of a river item.
Definition: views.php:973
elgg_view_message(string $type, string $body, array $vars=[])
Wrapper function for the message display pattern.
Definition: views.php:958
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:508
elgg_view_form(string $action, array $form_vars=[], array $body_vars=[])
Definition: views.php:1051
elgg_view_layout(string $layout_name, array $vars=[])
Displays a layout with optional parameters.
Definition: views.php:360
elgg_view_entity_form(string $entity_type, string $entity_subtype, ?\ElggEntity $entity=null, array $vars=[])
Render an entity edit/add form.
Definition: views.php:1087
elgg_view_relationship_list(array $relationships, array $vars=[])
Returns a rendered list of relationships, plus pagination.
Definition: views.php:750
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:850
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:654
elgg_register_rss_link()
Include the RSS icon link and link element in the head.
Definition: views.php:1317
elgg_view_title(string $title, array $vars=[])
Renders a title.
Definition: views.php:833
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:1472
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