Scriptlog Docs

Scriptlog Documentation

Code reference for the Scriptlog codebase

User Tools

Site Tools


scriptlog:lib:controller:searchapicontroller

This is an old revision of the document!


SearchApiController

Layer: Controller · Source: lib/controller/api/SearchApiController.php:26 (lines 26–311)


class SearchApiController extends ApiController

Search API Controller

Handles API requests for search functionality

Docblock Metadata

^ Tag ^ Value ^
| ''@category'' | Controller Class |
| ''@author'' | Blogware Team |
| ''@license'' | MIT |
| ''@version'' | 1.0 |
| ''@since'' | Since Release 1.0 |

Inheritance

^ Relation ^ Type ^ Meaning ^
| extends | [[scriptlog:lib:controller:apicontroller|''ApiController'']] | parent class/interface |

Constants (0)

None.

Properties (0)

None declared.

Methods (9)

^ Visibility ^ Method ^ Summary ^ Line ^
| public | ''__construct()'' | Constructor | 41 |
| public | ''index()'' | Search posts and pages (public endpoint) | 61 |
| private | ''checkRateLimit()'' | Check rate limit for search endpoint. | 143 |
| public | ''posts()'' | Search posts only | 163 |
| public | ''pages()'' | Search pages only | 177 |
| private | ''buildResponseData()'' | Build the search API response payload. | 197 |
| private | ''transformResults()'' | Transform search results for API response | 228 |
| private | ''generateExcerpt()'' | Generate excerpt from content | 261 |
| private | ''getContentUrl()'' | Get content URL based on type | 293 |

__construct()

public function __construct()

lines 41–49 (9)

Constructor

Takes no parameters.

index()

public function index($_params = [])

lines 61–136 (76)

Search posts and pages (public endpoint)

GET /api/v1/search?q=keyword GET /api/v1/search/posts?q=keyword GET /api/v1/search/pages?q=keyword

^ Parameter ^ Type ^ Default ^ Description ^
| ''$_params'' | ''(untyped)'' | ''[]'' | //none// |

Returns: (none declared) — void

checkRateLimit()

private function checkRateLimit(): bool

lines 143–153 (11)

Check rate limit for search endpoint.

Takes no parameters.

Returns: bool — bool

posts()

public function posts($params = [])

lines 163–167 (5)

Search posts only

GET /api/v1/search/posts?q=keyword

^ Parameter ^ Type ^ Default ^ Description ^
| ''$params'' | ''(untyped)'' | ''[]'' | //none// |

Returns: (none declared) — void

pages()

public function pages($params = [])

lines 177–181 (5)

Search pages only

GET /api/v1/search/pages?q=keyword

^ Parameter ^ Type ^ Default ^ Description ^
| ''$params'' | ''(untyped)'' | ''[]'' | //none// |

Returns: (none declared) — void

buildResponseData()

private function buildResponseData($results, $transformedResults, $type, $keyword, $totalPages, $hateoasLinks)

lines 197–219 (23)

Build the search API response payload.

The top-level “total” field is what the sidebar widget reads to render the result count without reaching into pagination.total_items.

^ Parameter ^ Type ^ Default ^ Description ^
| ''$results'' | ''(untyped)'' | //required// | Raw SearchFinder result (page, perPage, totalRows) |
| ''$transformedResults'' | ''(untyped)'' | //required// | Normalized results for the API consumer |
| ''$type'' | ''(untyped)'' | //required// | Requested search scope (all|posts|pages) |
| ''$keyword'' | ''(untyped)'' | //required// | Sanitized search keyword |
| ''$totalPages'' | ''(untyped)'' | //required// | Total number of result pages |
| ''$hateoasLinks'' | ''(untyped)'' | //required// | Optional HATEOAS pagination links |

Returns: (none declared) — array

transformResults()

private function transformResults($results, $_type)

lines 228–246 (19)

Transform search results for API response

^ Parameter ^ Type ^ Default ^ Description ^
| ''$results'' | ''(untyped)'' | //required// | //none// |
| ''$_type'' | ''(untyped)'' | //required// | //none// |

Returns: (none declared) — array

generateExcerpt()

private function generateExcerpt($content, $length = 150)

lines 261–283 (23)

Generate excerpt from content

Post content is stored double-encoded in the database (e.g. “&lt;p&gt;”), so HTML entities MUST be decoded before tags are stripped; doing it the other way round leaks raw HTML into the excerpt (the “Found undefined result(s)” / raw-<p> widget bug). Whitespace is then collapsed so the truncated excerpt reads cleanly.

^ Parameter ^ Type ^ Default ^ Description ^
| ''$content'' | ''(untyped)'' | //required// | //none// |
| ''$length'' | ''(untyped)'' | ''150'' | //none// |

Returns: (none declared) — string

getContentUrl()

private function getContentUrl($id, $slug, $type)

lines 293–310 (18)

Get content URL based on type

^ Parameter ^ Type ^ Default ^ Description ^
| ''$id'' | ''(untyped)'' | //required// | //none// |
| ''$slug'' | ''(untyped)'' | //required// | //none// |
| ''$type'' | ''(untyped)'' | //required// | //none// |

Returns: (none declared) — string

Imports

^ Alias ^ Fully-qualified name ^
| ''ApiController'' | [[scriptlog:lib:controller:apicontroller&#124;''Scriptlog\Controller\ApiController'']] |
| ''ApiHateoas'' | [[scriptlog:lib:core:apihateoas&#124;''Scriptlog\Core\ApiHateoas'']] |
| ''ApiResponse'' | [[scriptlog:lib:core:apiresponse&#124;''Scriptlog\Core\ApiResponse'']] |
| ''SearchFinder'' | [[scriptlog:lib:core:searchfinder&#124;''Scriptlog\Core\SearchFinder'']] |

This page is generated from source by 'tools/gendoc'. Edits will be overwritten.

scriptlog/lib/controller/searchapicontroller.1790413760.txt.gz · Last modified: by admin