Skip to content

Commit

Permalink
admin: Add support for comment search by Thread URL in admin interface
Browse files Browse the repository at this point in the history
  • Loading branch information
pkvach committed Apr 27, 2024
1 parent e3ee8fb commit ba8dffb
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 13 deletions.
2 changes: 2 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ New Features
- Make <code class="language-$lang"> for syntax highlighting (`#998`_, pkvach)
- Add search for comments by URL in the admin interface (`#1000`_, pkvach)
- Add CSS variables for better organization and flexibility (`#1001`_, pkvach)
- Add support for comment search by Thread URL in admin interface (`#1020`_, pkvach)

.. _#966: https://github.com/posativ/isso/pull/966
.. _#998: https://github.com/isso-comments/isso/pull/998
.. _#1000: https://github.com/isso-comments/isso/pull/1000
.. _#1001: https://github.com/isso-comments/isso/pull/1001
.. _#1020: https://github.com/isso-comments/isso/pull/1020

Breaking Changes
^^^^^^^^^^^^^^^^
Expand Down
5 changes: 4 additions & 1 deletion isso/db/comments.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def count_modes(self):
return dict(comment_count)

def fetchall(self, mode=5, after=0, parent='any', order_by='id',
limit=100, page=0, asc=1, comment_id=None):
limit=100, page=0, asc=1, comment_id=None, thread_uri=None):
"""
Return comments for admin with :param:`mode`.
"""
Expand All @@ -187,6 +187,9 @@ def fetchall(self, mode=5, after=0, parent='any', order_by='id',
if comment_id:
sql.append('comments.id = ? ')
sql_args = [comment_id]
elif thread_uri:
sql.append('threads.uri = ? ')
sql_args = [thread_uri]
else:
sql.append('comments.mode = ? ')
sql_args = [mode]
Expand Down
6 changes: 3 additions & 3 deletions isso/templates/admin.html
Original file line number Diff line number Diff line change
Expand Up @@ -74,9 +74,9 @@ <h2>Administration</h2>
<div class="search">
<form action="/admin/" method="get">
<input type="hidden" name="mode" value="0" />
<label>Comment URL
<input type="search" class="search__input" name="comment_url" value="{{comment_url}}" spellcheck="false"
required placeholder="https://example.com/demo/#isso-1" />
<label>Comment search URL
<input type="search" class="search__input" name="comment_search_url" value="{{comment_search_url}}" spellcheck="false"
required placeholder="Comment or Thread URL" />
</label>
<button type="submit" class="search__button">Search</button>
</form>
Expand Down
38 changes: 29 additions & 9 deletions isso/views/comments.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,22 @@ def get_comment_id_from_url(comment_url):
return comment_id


def get_uri_from_url(url):
try:
# Parse the URL to extract the URI
parsed_url = urlsplit(url)
except ValueError:
# Handle malformed URL
return None

uri = parsed_url.path
if not uri:
# Handle missing URI
return None

return uri


class API(object):

FIELDS = set(['id', 'parent', 'text', 'author', 'website',
Expand Down Expand Up @@ -1411,8 +1427,8 @@ def login(self, env, req):
Comment ordering
@apiQuery {Number{0,1}} [asc=0]
Ascending
@apiQuery {String} comment_url
Search comment by URL
@apiQuery {String} comment_search_url
Search comments by URL
@apiExample {curl} Listing of published comments:
curl 'https://comments.example.com/admin/?mode=1&page=0&order_by=modified&asc=1' -b cookie.txt
Expand All @@ -1433,12 +1449,16 @@ def admin(self, env, req):
order_by = req.args.get('order_by', 'created')
asc = int(req.args.get('asc', 0))
mode = int(req.args.get('mode', 2))
comment_url = req.args.get('comment_url', '')

# Search for a specific comment by URL
if comment_url:
comment_id = get_comment_id_from_url(comment_url)
comments = self.comments.fetchall(comment_id=comment_id, limit=1) if comment_id else []
comment_search_url = req.args.get('comment_search_url', '')

# Search for comments by URL
if comment_search_url:
comment_id = get_comment_id_from_url(comment_search_url)
uri = get_uri_from_url(comment_search_url)
if comment_id or uri:
comments = self.comments.fetchall(comment_id=comment_id, thread_uri=uri)
else:
comments = []
else:
comments = self.comments.fetchall(mode=mode, page=page,
limit=page_size,
Expand All @@ -1455,7 +1475,7 @@ def admin(self, env, req):
conf=self.conf, max_page=max_page,
counts=comment_mode_count,
order_by=order_by, asc=asc,
comment_url=comment_url,
comment_search_url=comment_search_url,
isso_host_script=isso_host_script)
"""
@api {get} /latest latest
Expand Down

0 comments on commit ba8dffb

Please sign in to comment.