Compare commits

...

4 commits

Author SHA1 Message Date
mrilyew
e49f927186
Merge c6f3d767fc into 4166481a75 2025-01-30 18:46:14 +03:00
celestora
4166481a75
fix(im): escape html in sent messages too (#1218)
fixes #1215
2025-01-30 00:13:20 +03:00
7fe0c6a122
ci(actions): unparallel builds (#1217)
this should fix linux/amd64 showing up as unknown/unknown on ghcr
2025-01-28 20:41:26 +03:00
mrilyew
c6f3d767fc feat(search): sort for subscribers 2024-12-22 15:07:26 +03:00
8 changed files with 196 additions and 127 deletions

View file

@ -3,142 +3,140 @@ name: Build images
on: [push, pull_request] on: [push, pull_request]
env: env:
BASE_IMAGE_NAME: openvk BASE_IMAGE_NAME: openvk
DB_IMAGE_NAME: mariadb DB_IMAGE_NAME: mariadb
EVENT_IMAGE_NAME: mariadb EVENT_IMAGE_NAME: mariadb
DB_VERSION: "10.9" DB_VERSION: '10.9'
jobs: jobs:
buildbase: buildbase:
name: Build base images name: Build base images
strategy:
matrix:
platform: [amd64, arm64]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Change repository string to lowercase - name: Set up Docker Buildx
id: repositorystring id: buildx
uses: Entepotenz/change-string-case-action-min-dependencies@v1.1.0 uses: docker/setup-buildx-action@v3
with: with:
string: ${{ github.repository }} platforms: linux/amd64,linux/arm64
- name: Base image meta - name: Change repository string to lowercase
id: basemeta id: repositorystring
uses: docker/metadata-action@v5 uses: Entepotenz/change-string-case-action-min-dependencies@v1.1.0
with: with:
images: | string: ${{ github.repository }}
ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/${{env.BASE_IMAGE_NAME}}
labels: |
org.opencontainers.image.documentation=https://github.com/OpenVK/openvk/blob/master/install/automated/docker/Readme.md
tags: |
type=sha
type=ref,event=branch
type=ref,event=pr
type=ref,event=tag
type=raw,value=latest,enable={{is_default_branch}}
- name: Log into registry - name: Base image meta
if: github.event_name != 'pull_request' id: basemeta
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin uses: docker/metadata-action@v5
with:
images: |
ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/${{env.BASE_IMAGE_NAME}}
labels: |
org.opencontainers.image.documentation=https://github.com/OpenVK/openvk/blob/master/install/automated/docker/Readme.md
tags: |
type=sha
type=ref,event=branch
type=ref,event=pr
type=ref,event=tag
type=raw,value=latest,enable={{is_default_branch}}
- name: Build base image - name: Log into registry
uses: docker/build-push-action@v6 if: github.event_name != 'pull_request'
with: run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
platforms: linux/${{matrix.platform}}
file: install/automated/docker/openvk.Dockerfile
tags: ${{ steps.basemeta.outputs.tags }}
labels: ${{ steps.basemeta.outputs.labels }}
push: ${{ github.event_name != 'pull_request' }}
build-args: |
GITREPO=${{ steps.repositorystring.outputs.lowercase }}
builddb: - name: Build base image
name: Build DB images uses: docker/build-push-action@v6
strategy: with:
matrix: platforms: linux/amd64,linux/arm64
platform: [amd64, arm64] file: install/automated/docker/openvk.Dockerfile
tags: ${{ steps.basemeta.outputs.tags }}
labels: ${{ steps.basemeta.outputs.labels }}
push: ${{ github.event_name != 'pull_request' }}
build-args: |
GITREPO=${{ steps.repositorystring.outputs.lowercase }}
runs-on: ubuntu-latest builddb:
name: Build DB images
steps: runs-on: ubuntu-latest
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v3
- name: Change repository string to lowercase steps:
id: repositorystring - name: Set up QEMU
uses: Entepotenz/change-string-case-action-min-dependencies@v1.1.0 uses: docker/setup-qemu-action@v3
with:
string: ${{ github.repository }}
- name: MariaDB primary meta - name: Set up Docker Buildx
id: db-primarymeta id: buildx
uses: docker/metadata-action@v5 uses: docker/setup-buildx-action@v3
with: with:
images: | platforms: linux/amd64,linux/arm64
ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/${{env.DB_IMAGE_NAME}}
labels: |
org.opencontainers.image.title=OpenVK MariaDB (Primary)
org.opencontainers.image.description=OpenVK's image for MariaDB for primary database.
org.opencontainers.image.documentation=https://github.com/OpenVK/openvk/blob/master/install/automated/docker/Readme.md
tags: |
type=sha,prefix=${{env.DB_VERSION}}-primary-sha-
type=ref,event=branch,prefix=${{env.DB_VERSION}}-primary-
type=ref,event=pr,prefix=${{env.DB_VERSION}}-primary-pr-
type=ref,event=tag,prefix=${{env.DB_VERSION}}-primary-
type=raw,value=${{env.DB_VERSION}}-primary,enable={{is_default_branch}}
- name: MariaDB event meta - name: Change repository string to lowercase
id: db-eventmeta id: repositorystring
uses: docker/metadata-action@v5 uses: Entepotenz/change-string-case-action-min-dependencies@v1.1.0
with: with:
images: | string: ${{ github.repository }}
ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/${{env.DB_IMAGE_NAME}}
labels: |
org.opencontainers.image.title=OpenVK MariaDB (EventDB)
org.opencontainers.image.description=OpenVK's image for MariaDB for event database.
org.opencontainers.image.documentation=https://github.com/OpenVK/openvk/blob/master/install/automated/docker/Readme.md
tags: |
type=sha,prefix=${{env.DB_VERSION}}-eventdb-sha-
type=ref,event=branch,prefix=${{env.DB_VERSION}}-eventdb-
type=ref,event=pr,prefix=${{env.DB_VERSION}}-eventdb-pr-
type=ref,event=tag,prefix=${{env.DB_VERSION}}-eventdb-
type=raw,value=${{env.DB_VERSION}}-eventdb,enable={{is_default_branch}}
- name: Log into registry - name: MariaDB primary meta
if: github.event_name != 'pull_request' id: db-primarymeta
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin uses: docker/metadata-action@v5
with:
- name: Build MariaDB primary image images: |
uses: docker/build-push-action@v6 ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/${{env.DB_IMAGE_NAME}}
with: labels: |
push: ${{ github.event_name != 'pull_request' }} org.opencontainers.image.title=OpenVK MariaDB (Primary)
platforms: linux/${{matrix.platform}} org.opencontainers.image.description=OpenVK's image for MariaDB for primary database.
file: install/automated/docker/mariadb-primary.Dockerfile org.opencontainers.image.documentation=https://github.com/OpenVK/openvk/blob/master/install/automated/docker/Readme.md
tags: ${{ steps.db-primarymeta.outputs.tags }} tags: |
labels: ${{ steps.db-primarymeta.outputs.labels }} type=sha,prefix=${{env.DB_VERSION}}-primary-sha-
build-args: | type=ref,event=branch,prefix=${{env.DB_VERSION}}-primary-
VERSION=${{env.DB_VERSION}} type=ref,event=pr,prefix=${{env.DB_VERSION}}-primary-pr-
type=ref,event=tag,prefix=${{env.DB_VERSION}}-primary-
- name: Build MariaDB event image type=raw,value=${{env.DB_VERSION}}-primary,enable={{is_default_branch}}
uses: docker/build-push-action@v6
with: - name: MariaDB event meta
push: ${{ github.event_name != 'pull_request' }} id: db-eventmeta
platforms: linux/${{matrix.platform}} uses: docker/metadata-action@v5
file: install/automated/docker/mariadb-eventdb.Dockerfile with:
tags: ${{ steps.db-eventmeta.outputs.tags }} images: |
labels: ${{ steps.db-eventmeta.outputs.labels }} ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/${{env.DB_IMAGE_NAME}}
build-args: | labels: |
VERSION=${{env.DB_VERSION}} org.opencontainers.image.title=OpenVK MariaDB (EventDB)
org.opencontainers.image.description=OpenVK's image for MariaDB for event database.
org.opencontainers.image.documentation=https://github.com/OpenVK/openvk/blob/master/install/automated/docker/Readme.md
tags: |
type=sha,prefix=${{env.DB_VERSION}}-eventdb-sha-
type=ref,event=branch,prefix=${{env.DB_VERSION}}-eventdb-
type=ref,event=pr,prefix=${{env.DB_VERSION}}-eventdb-pr-
type=ref,event=tag,prefix=${{env.DB_VERSION}}-eventdb-
type=raw,value=${{env.DB_VERSION}}-eventdb,enable={{is_default_branch}}
- name: Log into registry
if: github.event_name != 'pull_request'
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build MariaDB primary image
uses: docker/build-push-action@v6
with:
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64,linux/arm64
file: install/automated/docker/mariadb-primary.Dockerfile
tags: ${{ steps.db-primarymeta.outputs.tags }}
labels: ${{ steps.db-primarymeta.outputs.labels }}
build-args: |
VERSION=${{env.DB_VERSION}}
- name: Build MariaDB event image
uses: docker/build-push-action@v6
with:
push: ${{ github.event_name != 'pull_request' }}
platforms: linux/amd64,linux/arm64
file: install/automated/docker/mariadb-eventdb.Dockerfile
tags: ${{ steps.db-eventmeta.outputs.tags }}
labels: ${{ steps.db-eventmeta.outputs.labels }}
build-args: |
VERSION=${{env.DB_VERSION}}

View file

@ -62,9 +62,25 @@ class Clubs
$order_str = 'id'; $order_str = 'id';
switch($order['type']) { switch($order['type']) {
default:
case 'id': case 'id':
$order_str = 'id ' . ($order['invert'] ? 'ASC' : 'DESC'); $order_str = 'id ' . ($order['invert'] ? 'ASC' : 'DESC');
break; break;
case 'subs':
$sql_query = <<<EOF
SELECT `groups`.`id`, `subs`
FROM `groups`
LEFT JOIN
(SELECT `target`, COUNT(`follower`) as `subs`
FROM `subscriptions`
WHERE `model` = "openvk\\\\Web\\\\Models\\\\Entities\\\\Club"
GROUP BY `target`) `subscriptions` ON `subscriptions`.`target` = `groups`.`id`
WHERE `groups`.`name` LIKE ? OR `groups`.`about` LIKE ?
ORDER BY `subs` DESC
LIMIT ? OFFSET ?;
EOF;
return new Util\RawEntityStream("Club", $sql_query, $query, $query);
} }
$result = $result->where("name LIKE ? OR about LIKE ?", $query, $query); $result = $result->where("name LIKE ? OR about LIKE ?", $query, $query);

View file

@ -27,7 +27,7 @@ class EntityStream implements \IteratorAggregate
return new $this->entityClass($result); return new $this->entityClass($result);
} }
private function stream(\Traversable $iterator): \Traversable protected function stream(\Traversable $iterator): \Traversable
{ {
foreach($iterator as $result) foreach($iterator as $result)
yield $this->getEntity($result); yield $this->getEntity($result);

View file

@ -0,0 +1,50 @@
<?php declare(strict_types=1);
namespace openvk\Web\Models\Repositories\Util;
use Nette\Database\Row;
class RawEntityStream extends EntityStream
{
function __construct(string $repo, string $sql, ...$db_params)
{
$this->sqlQuery = $sql;
$this->entityRepo = new ($class[0] === "\\" ? $repo : "openvk\\Web\\Models\\Repositories\\$repo"."s");
$this->dbParams = $db_params;
}
private function dbs(int $page = 0, ?int $perPage = NULL): \Traversable
{
if(!$this->dbQuery) {
$this->dbParams[] = $perPage;
$this->dbParams[] = (($page - 1) * $perPage);
$this->dbQuery = \Chandler\Database\DatabaseConnection::i()->getConnection()->query($this->sqlQuery, ...$this->dbParams);
}
return $this->dbQuery;
}
private function getEntity(Row $result)
{
$repo = new $this->entityRepo;
return $repo->get($result->id);
}
protected function stream(\Traversable $iterator): \Traversable
{
foreach($iterator as $result)
yield $this->getEntity($result);
}
function page(int $page, ?int $perPage = NULL): \Traversable
{
$fetchedRows = $this->dbs($page, $perPage);
return $this->stream($fetchedRows);
}
function size(): int
{
bdump($this->dbs()->getRowCount());
return $this->dbs()->getRowCount();
}
}

View file

@ -232,7 +232,7 @@
sendMessage(content) { sendMessage(content) {
console.debug("New outcoming message. Pushing preview to local stack."); console.debug("New outcoming message. Pushing preview to local stack.");
let tempId = this.newMessage(content); let tempId = this.newMessage(escapeHtml(content));
let msgData = new FormData(); let msgData = new FormData();
msgData.set("content", content); msgData.set("content", content);

View file

@ -343,6 +343,9 @@
{if OPENVK_ROOT_CONF["openvk"]["preferences"]["commerce"]} {if OPENVK_ROOT_CONF["openvk"]["preferences"]["commerce"]}
<option value="rating" n:attr="selected => $order == 'rating'">{_s_order_by_rating}</option> <option value="rating" n:attr="selected => $order == 'rating'">{_s_order_by_rating}</option>
{/if} {/if}
{elseif $section == "groups"}
<option value="id" n:attr="selected => $order == 'id'">{_s_order_by_creation_date}</option>
<option value="subs" n:attr="selected => $order == 'subs'">{_s_order_by_subs}</option>
{elseif $section == "posts"} {elseif $section == "posts"}
<option value="id" n:attr="selected => $order == 'id'">{_s_order_by_publishing_date}</option> <option value="id" n:attr="selected => $order == 'id'">{_s_order_by_publishing_date}</option>
{elseif $section == "audios"} {elseif $section == "audios"}
@ -357,7 +360,7 @@
{/if} {/if}
</select> </select>
<label n:if="$order != 'rating'"> <label n:if="$order != 'rating' && $order != 'subs'">
<input type="checkbox" name="invert" value="1" form="search_form" n:attr="checked => $_REQUEST['invert'] == '1'"> <input type="checkbox" name="invert" value="1" form="search_form" n:attr="checked => $_REQUEST['invert'] == '1'">
{_s_order_invert} {_s_order_invert}
</label> </label>

View file

@ -2141,6 +2141,7 @@
"s_order_by_creation_date" = "By creation date"; "s_order_by_creation_date" = "By creation date";
"s_order_by_publishing_date" = "By publication date"; "s_order_by_publishing_date" = "By publication date";
"s_order_by_upload_date" = "By upload date"; "s_order_by_upload_date" = "By upload date";
"s_order_by_subs" = "By followers";
"s_by_date" = "By date"; "s_by_date" = "By date";
"s_registered_before" = "Registered before"; "s_registered_before" = "Registered before";

View file

@ -2036,6 +2036,7 @@
"s_order_by_creation_date" = "По дате создания"; "s_order_by_creation_date" = "По дате создания";
"s_order_by_publishing_date" = "По дате публикации"; "s_order_by_publishing_date" = "По дате публикации";
"s_order_by_upload_date" = "По дате загрузки"; "s_order_by_upload_date" = "По дате загрузки";
"s_order_by_subs" = "По подписчикам";
"s_by_date" = "По дате"; "s_by_date" = "По дате";
"s_registered_before" = "Зарегистрирован до"; "s_registered_before" = "Зарегистрирован до";