backend_entity_autocomplete

Triggered during the search used for adding a tag-like link with the # character to the task description or to a comment. Allows modifying the search query text and its results as well as adding search by objects provided by other apps not supported by Teamwork.

Teamwork

Input (passed by reference)

$params['term'] string Text typed by a user after the # character, which is used to search for objects in installed apps.
$params['limit'] int Maximum number of search results that can be shown.
… your plugin code …

Output

$return
The list of search results items. Each list item is an array with the following keys:
[]['app_id'] string Identifier of the app whose object has been found by the search.
[]['entity_type'] string Found object’s type.
[]['entity_title'] string Localized object name.
[]['entity_url'] string Relative URL of the link pointing to the found object.
Teamwork

Plugin code example

PHP

public function backendEntityAutocomplete(&$params)
{
    $term = &$params['term'];
    // Modify the term here if necessary; e.g., correct typos.
    // tasksMyPluginHelper::fixTypo($term);

    // Enable access to Site app's classes.
    wa('site');

    // E.g., search for Site app pages by their names.
    $site_pages_model = new sitePageModel();

    $pages = $site_pages_model
        ->select('id, name')
        ->where(
            'name LIKE s:term',
            [
                'term' => sprintf(
                    '%%%s%%',
                    $site_pages_model->escape($term, 'like')
                )
            ]
        )
        ->fetchAll();

    if ($pages) {
        $backend_url = wa()->getConfig()->getBackendUrl();

        return array_map(
            function ($page) use ($backend_url) {
                return [
                    'app_id' => 'site',
                    'entity_type' => 'page',
                    'entity_url' => sprintf(
                        '/%s/site/#/pages/%d',
                        $backend_url,
                        $page['id']
                    ),
                    'entity_title' => $page['name'],
                ];
            },
            $pages
        );
    }
}