+
+function follow_process(App $a, string $url)
+{
+ $return_path = 'follow?url=' . urlencode($url);
+
+ $result = Contact::createFromProbeForUser($a->getLoggedInUserId(), $url);
+
+ if ($result['success'] == false) {
+ // Possibly it is a remote item and not an account
+ follow_remote_item($url);
+
+ if ($result['message']) {
+ notice($result['message']);
+ }
+ DI::baseUrl()->redirect($return_path);
+ } elseif ($result['cid']) {
+ DI::baseUrl()->redirect('contact/' . $result['cid']);
+ }
+
+ notice(DI::l10n()->t('The contact could not be added.'));
+
+ DI::baseUrl()->redirect($return_path);
+}
+
+function follow_remote_item($url)
+{
+ $item_id = Item::fetchByLink($url, local_user());
+ if (!$item_id) {
+ // If the user-specific search failed, we search and probe a public post
+ $item_id = Item::fetchByLink($url);
+ }
+
+ if (!empty($item_id)) {
+ $item = Post::selectFirst(['guid'], ['id' => $item_id]);
+ if (DBA::isResult($item)) {
+ DI::baseUrl()->redirect('display/' . $item['guid']);
+ }
+ }
+}