diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index ddc730d6..04a1b344 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1 @@ -custom: "https://openvk.su/donate" \ No newline at end of file +custom: "https://ovk.to/donate" diff --git a/.github/workflows/build-base.yaml b/.github/workflows/build-base.yaml index 728c96b9..b053d398 100644 --- a/.github/workflows/build-base.yaml +++ b/.github/workflows/build-base.yaml @@ -24,12 +24,18 @@ jobs: id: buildx uses: docker/setup-buildx-action@v2 + - name: Change repository string to lowercase + id: repositorystring + uses: Entepotenz/change-string-case-action-min-dependencies@v1.1.0 + with: + string: ${{ github.repository }} + - name: Log into registry run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin - name: Build cli image run: | - IMAGE_NAME=ghcr.io/${{ github.repository }}/$BASE_IMAGE_NAME:$BASE_IMAGE_VERSION-cli + IMAGE_NAME=ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/$BASE_IMAGE_NAME:$BASE_IMAGE_VERSION-cli docker buildx build --platform linux/amd64,linux/arm64 -t $IMAGE_NAME . --push -f install/automated/docker/base-php-cli.Dockerfile --build-arg VERSION=$BASE_IMAGE_VERSION @@ -47,12 +53,18 @@ jobs: - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v2 + + - name: Change repository string to lowercase + id: repositorystring + uses: Entepotenz/change-string-case-action-min-dependencies@v1.1.0 + with: + string: ${{ github.repository }} - name: Log into registry run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin - + - name: Build apache image run: | - IMAGE_NAME=ghcr.io/${{ github.repository }}/$BASE_IMAGE_NAME:$BASE_IMAGE_VERSION-apache + IMAGE_NAME=ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/$BASE_IMAGE_NAME:$BASE_IMAGE_VERSION-apache docker buildx build --platform linux/amd64,linux/arm64 -t $IMAGE_NAME . --push -f install/automated/docker/base-php-apache.Dockerfile --build-arg VERSION=$BASE_IMAGE_VERSION diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index d4645520..24363f97 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -36,12 +36,18 @@ jobs: id: buildx uses: docker/setup-buildx-action@v2 + - name: Change repository string to lowercase + id: repositorystring + uses: Entepotenz/change-string-case-action-min-dependencies@v1.1.0 + with: + string: ${{ github.repository }} + - name: Log into registry run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin - name: Build base image run: | - IMAGE_ID=ghcr.io/${{ github.repository }}/$BASE_IMAGE_NAME + IMAGE_ID=ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/$BASE_IMAGE_NAME IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') @@ -49,16 +55,16 @@ jobs: echo IMAGE_ID=$IMAGE_ID echo VERSION=$VERSION - docker buildx build --platform linux/amd64,linux/arm64 -t $IMAGE_ID:$VERSION . --push -f install/automated/docker/openvk.Dockerfile --build-arg GITREPO=${{ github.repository }} + docker buildx build --platform linux/amd64,linux/arm64 -t $IMAGE_ID:$VERSION . --push -f install/automated/docker/openvk.Dockerfile --build-arg GITREPO=${{ steps.repositorystring.outputs.lowercase }} - name: Build MariaDB primary image run: | - IMAGE_NAME=ghcr.io/${{ github.repository }}/$DB_IMAGE_NAME:$DB_VERSION-primary + IMAGE_NAME=ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/$DB_IMAGE_NAME:$DB_VERSION-primary docker buildx build --platform linux/amd64,linux/arm64 -t $IMAGE_NAME . --push -f install/automated/docker/mariadb-primary.Dockerfile --build-arg VERSION=$DB_VERSION - name: Build MariaDB event image run: | - IMAGE_NAME=ghcr.io/${{ github.repository }}/$EVENT_IMAGE_NAME:$DB_VERSION-eventdb + IMAGE_NAME=ghcr.io/${{ steps.repositorystring.outputs.lowercase }}/$EVENT_IMAGE_NAME:$DB_VERSION-eventdb docker buildx build --platform linux/amd64,linux/arm64 -t $IMAGE_NAME . --push -f install/automated/docker/mariadb-eventdb.Dockerfile --build-arg VERSION=$DB_VERSION \ No newline at end of file diff --git a/Email/hello.eml.latte b/Email/hello.eml.latte index 48fd562e..8ae66499 100644 --- a/Email/hello.eml.latte +++ b/Email/hello.eml.latte @@ -12,7 +12,7 @@
- Добро пожаловать в OpenVK! Приятного времяприпровождения, надеюсь вам понравится.

Если появились вопросы, касаемые нашего сайта, пишите сюда + Добро пожаловать в OpenVK! Приятного времяприпровождения, надеюсь вам понравится.

Если появились вопросы, касаемые нашего сайта, пишите сюда
diff --git a/README.md b/README.md index 7a2c91b5..82df13e7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# openvkOpenVK +# openvkOpenVK _[Русский](README_RU.md)_ @@ -6,7 +6,7 @@ _[Русский](README_RU.md)_ VKontakte belongs to Pavel Durov and VK Group. -To be honest, we don't know whether if it even works. However, this version is maintained and we will be happy to accept your bugreports [in our bug tracker](https://github.com/openvk/openvk/projects/1). You should also be able to submit them using [ticketing system](https://openvk.su/support?act=new) (you will need an OpenVK account for this). +To be honest, we don't know whether if it even works. However, this version is maintained and we will be happy to accept your bugreports [in our bug tracker](https://github.com/openvk/openvk/projects/1). You should also be able to submit them using [ticketing system](https://ovk.to/support?act=new) (you will need an OpenVK account for this). ## When's the release? @@ -26,6 +26,14 @@ However, OVK makes use of Chandler Application Server. This software requires ex If you want, you can add your instance to the list above so that people can register there. +### System requirements + +Here is our minimum hardware recommendation: + +* **CPU: Recent** (AMD Zen2 or equivalent) quad-core 2GHz+ CPU +* **RAM:** At least 2GB RAM (we recommend 6GB or 8GB for OpenVK with Kafka) +* **Minimum database space:** 10GB + ### Installation procedure 1. Install PHP 7.4, web-server, Composer, Node.js, Yarn and [Chandler](https://github.com/openvk/chandler) @@ -66,7 +74,7 @@ Once you are done, you can login as a system administrator on the network itself * **Password**: `admin` * It is recommended to change the password of the built-in account or disable it. -💡 Confused? Full installation walkthrough is available [here](https://docs.openvk.uk/openvk_engine/centos8_installation/) (CentOS 8 [and](https://almalinux.org/) [family](https://yum.oracle.com/oracle-linux-isos.html)). +💡 Confused? Full installation walkthrough is available [here](https://docs.ovk.to/openvk_engine/centos8_installation/) (CentOS 8 [and](https://almalinux.org/) [family](https://yum.oracle.com/oracle-linux-isos.html)). ### Looking for Docker or Kubernetes deployment? See `install/automated/docker/README.md` and `install/automated/kubernetes/README.md` for Docker and Kubernetes deployment instructions. @@ -80,7 +88,7 @@ It depends. You can keep the sources to yourself if you do not plan to distribut You may reach out to us via: * [Bug Tracker](https://github.com/openvk/openvk/projects/1) -* [Ticketing System](https://openvk.su/support?act=new) +* [Ticketing System](https://ovk.to/support?act=new) * Telegram Chat: Go to [our channel](https://t.me/openvkenglish) and open discussion in our channel menu. * [Reddit](https://www.reddit.com/r/openvk/) * [GitHub Discussions](https://github.com/openvk/openvk/discussions) diff --git a/README_RU.md b/README_RU.md index 7de91c39..fa09cabe 100644 --- a/README_RU.md +++ b/README_RU.md @@ -1,4 +1,4 @@ -# openvkOpenVK +# openvkOpenVK _[English](README.md)_ @@ -6,7 +6,7 @@ _[English](README.md)_ ВКонтакте принадлежит Павлу Дурову и VK Group. -Честно говоря, мы даже не знаем, работает ли она вообще. Однако, эта версия поддерживается, и мы будем рады принять ваши сообщения об ошибках [в нашем баг-трекере](https://github.com/openvk/openvk/projects/1). Вы также можете отправлять их через [вкладку "Помощь"](https://openvk.su/support?act=new) (для этого вам понадобится учетная запись OpenVK). +Честно говоря, мы даже не знаем, работает ли она вообще. Однако, эта версия поддерживается, и мы будем рады принять ваши сообщения об ошибках [в нашем баг-трекере](https://github.com/openvk/openvk/projects/1). Вы также можете отправлять их через [вкладку "Помощь"](https://ovk.to/support?act=new) (для этого вам понадобится учетная запись OpenVK). ## Когда выйдет релизная версия? @@ -66,7 +66,7 @@ ln -s /path/to/chandler/extensions/available/openvk /path/to/chandler/extensions * **Пароль**: `admin` * Перед использованием встроенной учетной записи рекомендуется сменить пароль или отключить её. -💡Запутались? Полное руководство по установке доступно [здесь](https://docs.openvk.uk/openvk_engine/centos8_installation/) (CentOS 8 [и](https://almalinux.org/ru/) [семейство](https://yum.oracle.com/oracle-linux-isos.html)). +💡Запутались? Полное руководство по установке доступно [здесь](https://docs.ovk.to/openvk_engine/centos8_installation/) (CentOS 8 [и](https://almalinux.org/ru/) [семейство](https://yum.oracle.com/oracle-linux-isos.html)). # Установка в Docker/Kubernetes Подробные иструкции можно найти в `install/automated/docker/README.md` и `install/automated/kubernetes/README.md` соответственно. @@ -80,7 +80,7 @@ ln -s /path/to/chandler/extensions/available/openvk /path/to/chandler/extensions Вы можете связаться с нами через: * [Баг-трекер](https://github.com/openvk/openvk/projects/1) -* [Помощь в OVK](https://openvk.su/support?act=new) +* [Помощь в OVK](https://ovk.to/support?act=new) * Telegram-чат: Перейдите на [наш канал](https://t.me/openvk) и откройте обсуждение в меню нашего канала. * [Reddit](https://www.reddit.com/r/openvk/) * [GitHub Discussions](https://github.com/openvk/openvk/discussions) diff --git a/ServiceAPI/Apps.php b/ServiceAPI/Apps.php index 6504c23e..a09dc49f 100644 --- a/ServiceAPI/Apps.php +++ b/ServiceAPI/Apps.php @@ -1,8 +1,11 @@ withdrawCoins(); $resolve($coins); } + + function getRegularToken(string $clientName, bool $acceptsStale, callable $resolve, callable $reject): void + { + $token = NULL; + $stale = true; + if($acceptsStale) + $token = (new APITokens)->getStaleByUser($this->user->getId(), $clientName); + + if(is_null($token)) { + $stale = false; + $token = new APIToken; + $token->setUser($this->user); + $token->setPlatform($clientName ?? (new WhichBrowser\Parser(getallheaders()))->toString()); + $token->save(); + } + + $resolve([ + 'is_stale' => $stale, + 'token' => $token->getFormattedToken(), + ]); + } } \ No newline at end of file diff --git a/VKAPI/Handlers/Audio.php b/VKAPI/Handlers/Audio.php index 413a2a3a..004daef4 100644 --- a/VKAPI/Handlers/Audio.php +++ b/VKAPI/Handlers/Audio.php @@ -485,7 +485,7 @@ final class Audio extends VKAPIRequestHandler $this->requireUser(); $this->willExecuteWriteAction(); - if(!is_null($album_id)) + if(!is_null($album_id)) $this->fail(10, "album_id not implemented"); // TODO get rid of dups diff --git a/VKAPI/Handlers/Friends.php b/VKAPI/Handlers/Friends.php index 56af8d11..51046be4 100644 --- a/VKAPI/Handlers/Friends.php +++ b/VKAPI/Handlers/Friends.php @@ -147,7 +147,7 @@ final class Friends extends VKAPIRequestHandler return $response; } - function getRequests(string $fields = "", int $offset = 0, int $count = 100, int $extended = 0): object + function getRequests(string $fields = "", int $out = 0, int $offset = 0, int $count = 100, int $extended = 0): object { if ($count >= 1000) $this->fail(100, "One of the required parameters was not passed or is invalid."); @@ -158,9 +158,18 @@ final class Friends extends VKAPIRequestHandler $offset++; $followers = []; - foreach($this->getUser()->getFollowers($offset, $count) as $follower) { - $followers[$i] = $follower->getId(); - $i++; + if ($out != 0) { + foreach($this->getUser()->getFollowers($offset, $count) as $follower) { + $followers[$i] = $follower->getId(); + $i++; + } + } + else + { + foreach($this->getUser()->getRequests($offset, $count) as $follower) { + $followers[$i] = $follower->getId(); + $i++; + } } $response = $followers; diff --git a/VKAPI/Handlers/Groups.php b/VKAPI/Handlers/Groups.php index ffa4fedd..f83079ec 100644 --- a/VKAPI/Handlers/Groups.php +++ b/VKAPI/Handlers/Groups.php @@ -347,7 +347,10 @@ final class Groups extends VKAPIRequestHandler !empty($topics) ? $club->setEveryone_Can_Create_Topics($topics) : NULL; !empty($adminlist) ? $club->setAdministrators_List_Display($adminlist) : NULL; !empty($topicsAboveWall) ? $club->setDisplay_Topics_Above_Wall($topicsAboveWall) : NULL; - !empty($hideFromGlobalFeed) ? $club->setHide_From_Global_Feed($hideFromGlobalFeed) : NULL; + + if (!$club->isHidingFromGlobalFeedEnforced()) { + !empty($hideFromGlobalFeed) ? $club->setHide_From_Global_Feed($hideFromGlobalFeed) : NULL; + } in_array($audio, [0, 1]) ? $club->setEveryone_can_upload_audios($audio) : NULL; diff --git a/VKAPI/Handlers/Users.php b/VKAPI/Handlers/Users.php index 5ad59541..f6e5823f 100644 --- a/VKAPI/Handlers/Users.php +++ b/VKAPI/Handlers/Users.php @@ -246,6 +246,9 @@ final class Users extends VKAPIRequestHandler "notes_count" => (new Notes)->getUserNotesCount($usr) ]; break; + case "guid": + $response[$i]->guid = $usr->getChandlerGUID(); + break; } } diff --git a/VKAPI/Handlers/Utils.php b/VKAPI/Handlers/Utils.php index 5350a64f..a1c4f3b5 100644 --- a/VKAPI/Handlers/Utils.php +++ b/VKAPI/Handlers/Utils.php @@ -22,7 +22,7 @@ final class Utils extends VKAPIRequestHandler "object_id" => (int) substr($screen_name, strlen("club")), "type" => "group" ]; - } + } else $this->fail(104, "Not found"); } else { $user = (new Users)->getByShortURL($screen_name); if($user) { @@ -39,8 +39,17 @@ final class Utils extends VKAPIRequestHandler "type" => "group" ]; } - - return (object) []; + + $this->fail(104, "Not found"); } } + + function resolveGuid(string $guid): object + { + $user = (new Users)->getByChandlerUserId($guid); + if (is_null($user)) + $this->fail(104, "Not found"); + + return $user->toVkApiStruct($this->getUser()); + } } diff --git a/VKAPI/README.md b/VKAPI/README.md index 75918afc..08c8408b 100644 --- a/VKAPI/README.md +++ b/VKAPI/README.md @@ -5,7 +5,7 @@ exceptions. It is still a work-in-progress functionality. **Note**: requests to API are routed through openvk.Web.Presenters.VKAPIPresenter, this dir contains only handlers. -[Documentation for API clients](https://docs.openvk.uk/openvk_engine/api/description/) +[Documentation for API clients](https://docs.ovk.to/openvk_engine/api/description/) ## Implementing API methods diff --git a/Web/Models/Entities/Club.php b/Web/Models/Entities/Club.php index a46eb573..dc1c356e 100644 --- a/Web/Models/Entities/Club.php +++ b/Web/Models/Entities/Club.php @@ -152,6 +152,11 @@ class Club extends RowModel return (bool) $this->getRecord()->hide_from_global_feed; } + function isHidingFromGlobalFeedEnforced(): bool + { + return (bool) $this->getRecord()->enforce_hiding_from_global_feed; + } + function getType(): int { return $this->getRecord()->type; diff --git a/Web/Models/Entities/Photo.php b/Web/Models/Entities/Photo.php index 4cba7734..3ea46939 100644 --- a/Web/Models/Entities/Photo.php +++ b/Web/Models/Entities/Photo.php @@ -114,7 +114,7 @@ class Photo extends Media return true; } - function crop(real $left, real $top, real $width, real $height): void + function crop(float $left, float $top, float $width, float $height): void { if(isset($this->changes["hash"])) $hash = $this->changes["hash"]; diff --git a/Web/Models/Entities/Traits/TSubscribable.php b/Web/Models/Entities/Traits/TSubscribable.php index 802bc427..7d1c0d28 100644 --- a/Web/Models/Entities/Traits/TSubscribable.php +++ b/Web/Models/Entities/Traits/TSubscribable.php @@ -39,4 +39,25 @@ trait TSubscribable $sub->delete(); return false; } + + function changeFlags(User $user, int $flags, bool $reverse): bool + { + $ctx = DatabaseConnection::i()->getContext(); + $data = [ + "follower" => $reverse ? $this->getId() : $user->getId(), + "model" => static::class, + "target" => $reverse ? $user->getId() : $this->getId(), + ]; + $sub = $ctx->table("subscriptions")->where($data); + + bdump($data); + + if (!$sub) + return false; + + $sub->update([ + 'flags' => $flags + ]); + return true; + } } diff --git a/Web/Models/Entities/User.php b/Web/Models/Entities/User.php index 4f1fbff1..933ab486 100644 --- a/Web/Models/Entities/User.php +++ b/Web/Models/Entities/User.php @@ -592,6 +592,16 @@ class User extends RowModel return $this->_abstractRelationCount("get-followers"); } + function getRequests(int $page = 1, int $limit = 6): \Traversable + { + return $this->_abstractRelationGenerator("get-requests", $page, $limit); + } + + function getRequestsCount(): int + { + return $this->_abstractRelationCount("get-requests"); + } + function getSubscriptions(int $page = 1, int $limit = 6): \Traversable { return $this->_abstractRelationGenerator("get-subscriptions-user", $page, $limit); diff --git a/Web/Models/Repositories/APITokens.php b/Web/Models/Repositories/APITokens.php index 592688a8..8a9f2870 100644 --- a/Web/Models/Repositories/APITokens.php +++ b/Web/Models/Repositories/APITokens.php @@ -23,4 +23,13 @@ class APITokens extends Repository return $token; } + + function getStaleByUser(int $userId, string $platform, bool $withRevoked = false): ?APIToken + { + return $this->toEntity($this->table->where([ + 'user' => $userId, + 'platform' => $platform, + 'deleted' => $withRevoked, + ])->fetch()); + } } diff --git a/Web/Models/Repositories/Users.php b/Web/Models/Repositories/Users.php index 8e29d866..e826f3b3 100644 --- a/Web/Models/Repositories/Users.php +++ b/Web/Models/Repositories/Users.php @@ -44,9 +44,14 @@ class Users return $alias->getUser(); } + function getByChandlerUserId(string $cid): ?User + { + return $this->toUser($this->users->where("user", $cid)->fetch()); + } + function getByChandlerUser(?ChandlerUser $user): ?User { - return $user ? $this->toUser($this->users->where("user", $user->getId())->fetch()) : NULL; + return $user ? $this->getByChandlerUserId($user->getId()) : NULL; } function find(string $query, array $pars = [], string $sort = "id DESC"): Util\EntityStream diff --git a/Web/Models/sql/get-followers.tsql b/Web/Models/sql/get-followers.tsql index 552aafb8..b07b1c69 100644 --- a/Web/Models/sql/get-followers.tsql +++ b/Web/Models/sql/get-followers.tsql @@ -1,5 +1,5 @@ (SELECT DISTINCT(follower) AS __id FROM - (SELECT follower FROM subscriptions WHERE target=? AND model="openvk\\Web\\Models\\Entities\\User") u0 + (SELECT follower, flags FROM subscriptions WHERE target=? AND model="openvk\\Web\\Models\\Entities\\User") u0 LEFT JOIN (SELECT target FROM subscriptions WHERE follower=? AND model="openvk\\Web\\Models\\Entities\\User") u1 ON u0.follower = u1.target WHERE u1.target IS NULL) u2 diff --git a/Web/Models/sql/get-requests.tsql b/Web/Models/sql/get-requests.tsql new file mode 100755 index 00000000..0220e340 --- /dev/null +++ b/Web/Models/sql/get-requests.tsql @@ -0,0 +1,6 @@ + (SELECT DISTINCT(follower) AS __id FROM + (SELECT follower FROM subscriptions WHERE target=? AND flags=0 AND model="openvk\\Web\\Models\\Entities\\User") u0 + LEFT JOIN + (SELECT target FROM subscriptions WHERE follower=? AND flags=0 AND model="openvk\\Web\\Models\\Entities\\User") u1 + ON u0.follower = u1.target WHERE u1.target IS NULL) u2 +INNER JOIN profiles ON profiles.id = u2.__id \ No newline at end of file diff --git a/Web/Presenters/AboutPresenter.php b/Web/Presenters/AboutPresenter.php index 73e4da7f..49ff1c32 100644 --- a/Web/Presenters/AboutPresenter.php +++ b/Web/Presenters/AboutPresenter.php @@ -145,6 +145,6 @@ final class AboutPresenter extends OpenVKPresenter function renderDev(): void { - $this->redirect("https://docs.openvk.uk/"); + $this->redirect("https://docs.ovk.to/"); } } diff --git a/Web/Presenters/AdminPresenter.php b/Web/Presenters/AdminPresenter.php index 3d864e56..b8f480ca 100644 --- a/Web/Presenters/AdminPresenter.php +++ b/Web/Presenters/AdminPresenter.php @@ -48,6 +48,13 @@ final class AdminPresenter extends OpenVKPresenter if(!OPENVK_ROOT_CONF["openvk"]["preferences"]["commerce"]) $this->flash("warn", tr("admin_commerce_disabled"), tr("admin_commerce_disabled_desc")); } + + private function warnIfLongpoolBroken(): void + { + bdump(is_writable(CHANDLER_ROOT . '/tmp/events.bin')); + if(file_exists(CHANDLER_ROOT . '/tmp/events.bin') == false || is_writable(CHANDLER_ROOT . '/tmp/events.bin') == false) + $this->flash("warn", tr("admin_longpool_broken"), tr("admin_longpool_broken_desc", CHANDLER_ROOT . '/tmp/events.bin')); + } private function searchResults(object $repo, &$count) { @@ -76,7 +83,7 @@ final class AdminPresenter extends OpenVKPresenter function renderIndex(): void { - + $this->warnIfLongpoolBroken(); } function renderUsers(): void @@ -154,6 +161,7 @@ final class AdminPresenter extends OpenVKPresenter $club->setShortCode($this->postParam("shortcode")); $club->setVerified(empty($this->postParam("verify") ? 0 : 1)); $club->setHide_From_Global_Feed(empty($this->postParam("hide_from_global_feed") ? 0 : 1)); + $club->setEnforce_Hiding_From_Global_Feed(empty($this->postParam("enforce_hiding_from_global_feed") ? 0 : 1)); $club->save(); break; case "ban": @@ -681,7 +689,8 @@ final class AdminPresenter extends OpenVKPresenter $this->template->obj_type = $obj_type; } - $this->template->logs = (new Logs)->search($filter); + $logs = iterator_to_array((new Logs)->search($filter)); + $this->template->logs = $logs; $this->template->object_types = (new Logs)->getTypes(); } } diff --git a/Web/Presenters/GroupPresenter.php b/Web/Presenters/GroupPresenter.php index a0d1ce47..88844fbe 100644 --- a/Web/Presenters/GroupPresenter.php +++ b/Web/Presenters/GroupPresenter.php @@ -233,7 +233,10 @@ final class GroupPresenter extends OpenVKPresenter $club->setEveryone_Can_Create_Topics(empty($this->postParam("everyone_can_create_topics")) ? 0 : 1); $club->setDisplay_Topics_Above_Wall(empty($this->postParam("display_topics_above_wall")) ? 0 : 1); $club->setEveryone_can_upload_audios(empty($this->postParam("upload_audios")) ? 0 : 1); - $club->setHide_From_Global_Feed(empty($this->postParam("hide_from_global_feed")) ? 0 : 1); + + if (!$club->isHidingFromGlobalFeedEnforced()) { + $club->setHide_From_Global_Feed(empty($this->postParam("hide_from_global_feed") ? 0 : 1)); + } $website = $this->postParam("website") ?? ""; if(empty($website)) diff --git a/Web/Presenters/UserPresenter.php b/Web/Presenters/UserPresenter.php index 2b8c3087..baf8f046 100644 --- a/Web/Presenters/UserPresenter.php +++ b/Web/Presenters/UserPresenter.php @@ -329,9 +329,12 @@ final class UserPresenter extends OpenVKPresenter $user = $this->users->get((int) $this->postParam("id")); if(!$user) exit("Invalid state"); - $user->toggleSubscription($this->user->identity); + if ($this->postParam("act") == "rej") + $user->changeFlags($this->user->identity, 0b10000000, true); + else + $user->toggleSubscription($this->user->identity); - $this->redirect($user->getURL()); + $this->redirect($_SERVER['HTTP_REFERER']); } function renderSetAvatar() { diff --git a/Web/Presenters/VKAPIPresenter.php b/Web/Presenters/VKAPIPresenter.php index 963c9ccc..d82194cf 100644 --- a/Web/Presenters/VKAPIPresenter.php +++ b/Web/Presenters/VKAPIPresenter.php @@ -234,8 +234,14 @@ final class VKAPIPresenter extends OpenVKPresenter } try { - settype($val, $parameter->getType()->getName()); - $params[] = $val; + // Проверка типа параметра + $type = $parameter->getType(); + if (($type && !$type->isBuiltin()) || is_null($val)) { + $params[] = $val; + } else { + settype($val, $parameter->getType()->getName()); + $params[] = $val; + } } catch (\Throwable $e) { // Just ignore the exception, since // some args are intended for internal use @@ -286,17 +292,31 @@ final class VKAPIPresenter extends OpenVKPresenter $this->fail(28, "Invalid 2FA code", "internal", "acquireToken"); } - $platform = $this->requestParam("client_name"); - - $token = new APIToken; - $token->setUser($user); - $token->setPlatform($platform ?? (new WhichBrowser\Parser(getallheaders()))->toString()); - $token->save(); + $token = NULL; + $tokenIsStale = true; + $platform = $this->requestParam("client_name"); + $acceptsStale = $this->requestParam("accepts_stale"); + if($acceptsStale == "1") { + if(is_null($platform)) + $this->fail(101, "accepts_stale can only be used with explicitly set client_name", "internal", "acquireToken"); + + $token = (new APITokens)->getStaleByUser($uId, $platform); + } + + if(is_null($token)) { + $tokenIsStale = false; + + $token = new APIToken; + $token->setUser($user); + $token->setPlatform($platform ?? (new WhichBrowser\Parser(getallheaders()))->toString()); + $token->save(); + } $payload = json_encode([ "access_token" => $token->getFormattedToken(), "expires_in" => 0, "user_id" => $uId, + "is_stale" => $tokenIsStale, ]); $size = strlen($payload); @@ -304,4 +324,42 @@ final class VKAPIPresenter extends OpenVKPresenter header("Content-Length: $size"); exit($payload); } + + function renderOAuthLogin() { + $this->assertUserLoggedIn(); + + $client = $this->queryParam("client_name"); + $postmsg = $this->queryParam("prefers_postMessage") ?? '0'; + $stale = $this->queryParam("accepts_stale") ?? '0'; + $origin = NULL; + $url = $this->queryParam("redirect_uri"); + if(is_null($url) || is_null($client)) + exit("Error: redirect_uri and client_name params are required."); + + if($url != "about:blank") { + if(!filter_var($url, FILTER_VALIDATE_URL)) + exit("Error: Invalid URL passed to redirect_uri."); + + $parsedUrl = (object) parse_url($url); + if($parsedUrl->scheme != 'https' && $parsedUrl->scheme != 'http') + exit("Error: redirect_uri should either point to about:blank or to a web resource."); + + $origin = "$parsedUrl->scheme://$parsedUrl->host"; + if(!is_null($parsedUrl->port ?? NULL)) + $origin .= ":$parsedUrl->port"; + + $url .= strpos($url, '?') === false ? '?' : '&'; + } else { + $url .= "#"; + if($postmsg == '1') { + exit("Error: prefers_postMessage can only be set if redirect_uri is not about:blank"); + } + } + + $this->template->clientName = $client; + $this->template->usePostMessage = $postmsg == '1'; + $this->template->acceptsStale = $stale == '1'; + $this->template->origin = $origin; + $this->template->redirectUri = $url; + } } diff --git a/Web/Presenters/templates/@layout.xml b/Web/Presenters/templates/@layout.xml index a90fdc36..803ebdd0 100644 --- a/Web/Presenters/templates/@layout.xml +++ b/Web/Presenters/templates/@layout.xml @@ -180,9 +180,9 @@ {_edit_button} {_my_page} {_my_friends} - + - ({$thisUser->getFollowersCount()}) + ({$thisUser->getRequestsCount()}) @@ -198,9 +198,9 @@ {_my_groups} {_my_feed} {_my_feedback} - {if $thisUser->getNotificationsCount() > 0} + ({$thisUser->getNotificationsCount()}) - {/if} + {_my_apps} {_my_settings} @@ -405,13 +405,6 @@ {script "js/al_notifs.js"} {/ifset} - {if OPENVK_ROOT_CONF['openvk']['preferences']['bellsAndWhistles']['fartscroll']} - - - {/if} - diff --git a/Web/Presenters/templates/@listView.xml b/Web/Presenters/templates/@listView.xml index f2342a85..4b2dd9ff 100644 --- a/Web/Presenters/templates/@listView.xml +++ b/Web/Presenters/templates/@listView.xml @@ -49,7 +49,7 @@ {include description, x => $dat} {/ifset} - + {include actions, x => $dat} diff --git a/Web/Presenters/templates/About/Version.xml b/Web/Presenters/templates/About/Version.xml index 47fc7ed6..6b9d25f4 100644 --- a/Web/Presenters/templates/About/Version.xml +++ b/Web/Presenters/templates/About/Version.xml @@ -255,17 +255,6 @@ Disabled - - - Fartscroll - - - {php echo OPENVK_ROOT_CONF["openvk"]["preferences"]["bellsAndWhistles"]["fartscroll"] ? "Enabled" : "Disabled"} - - - Disabled - - NDA Test Label diff --git a/Web/Presenters/templates/Admin/Club.xml b/Web/Presenters/templates/Admin/Club.xml index a8f3ad50..2837da57 100644 --- a/Web/Presenters/templates/Admin/Club.xml +++ b/Web/Presenters/templates/Admin/Club.xml @@ -58,13 +58,17 @@
- isVerified()} checked {/if} /> +
- isHideFromGlobalFeedEnabled()} checked {/if} /> +
+
+ + +

diff --git a/Web/Presenters/templates/Group/Edit.xml b/Web/Presenters/templates/Group/Edit.xml index 3b865fd9..e4c177c5 100644 --- a/Web/Presenters/templates/Group/Edit.xml +++ b/Web/Presenters/templates/Group/Edit.xml @@ -83,7 +83,7 @@ {_group_hide_from_global_feed} + {_group_hide_from_global_feed} diff --git a/Web/Presenters/templates/Group/Followers.xml b/Web/Presenters/templates/Group/Followers.xml index 67e6af9c..7a1654d2 100644 --- a/Web/Presenters/templates/Group/Followers.xml +++ b/Web/Presenters/templates/Group/Followers.xml @@ -54,8 +54,8 @@ - - + + diff --git a/Web/Presenters/templates/Report/View.xml b/Web/Presenters/templates/Report/View.xml index 4a0682d1..6731ee53 100644 --- a/Web/Presenters/templates/Report/View.xml +++ b/Web/Presenters/templates/Report/View.xml @@ -23,7 +23,7 @@ - + diff --git a/Web/Presenters/templates/User/Friends.xml b/Web/Presenters/templates/User/Friends.xml index 4d5033f0..b84228c5 100644 --- a/Web/Presenters/templates/User/Friends.xml +++ b/Web/Presenters/templates/User/Friends.xml @@ -4,11 +4,14 @@ {var $act = $_GET["act"] ?? "friends"} {if $act == "incoming"} - {var $iterator = iterator_to_array($user->getFollowers($page))} - {var $count = $user->getFollowersCount()} + {var $iterator = iterator_to_array($user->getRequests($page))} + {var $count = $user->getRequestsCount()} {elseif $act == "outcoming"} {var $iterator = iterator_to_array($user->getSubscriptions($page))} {var $count = $user->getSubscriptionsCount()} +{elseif $act == "followers"} + {var $iterator = iterator_to_array($user->getFollowers($page))} + {var $count = $user->getFollowersCount()} {elseif $act == "online"} {var $iterator = iterator_to_array($user->getFriendsOnline($page))} {var $count = $user->getFriendsOnlineCount()} @@ -22,6 +25,8 @@ {_incoming_req} {elseif $act == "outcoming"} {_outcoming_req} + {elseif $act == "followers"} + {_followers} {elseif $act == "online"} {_friends_online} {else} @@ -38,6 +43,8 @@ {_incoming_req} {elseif $act == "outcoming"} {_outcoming_req} + {elseif $act == "followers"} + {_followers} {elseif $act == "online"} {_friends_online} {else} @@ -53,18 +60,23 @@ -
- {_req} +
+ {_req}
{/block} {block size} -
+
+
+ +
{_outcoming_req} @@ -78,6 +90,8 @@ {tr("req", $count)} {elseif $act == "outcoming"} {tr("req", $count)} + {elseif $act == "followers"} + {tr("followers", $count)} {elseif $act == "online"} {tr("friends_list_online", $count)} {else} @@ -112,8 +126,8 @@
{_gender}: {$user->isFemale() ? tr("female"): tr("male")}{_pronouns}: {$x->isFemale() ? tr("female") : ($x->isNeutral() ? tr("neutral") : tr("male"))}
{_registration_date}:
- - + + @@ -131,21 +145,29 @@ {if ($x->getId() !== $thisUser->getId()) && ($thisUser->getId() === $user->getId())} {var $subStatus = $x->getSubscriptionStatus($thisUser)} {if $subStatus === 0} - + {elseif $subStatus === 1} - + + {if $act !== 'followers'} + + + + + + + {/if} {elseif $subStatus === 2} - + @@ -153,7 +175,7 @@ {elseif $subStatus === 3} {_send_message} - + diff --git a/Web/Presenters/templates/VKAPI/OAuthLogin.xml b/Web/Presenters/templates/VKAPI/OAuthLogin.xml new file mode 100644 index 00000000..40cf10d5 --- /dev/null +++ b/Web/Presenters/templates/VKAPI/OAuthLogin.xml @@ -0,0 +1,193 @@ + + + + + Получение доступа | OpenVK + + + +
+
+
+
+ + +
+
+ +
+
+
+ {_app}, + + {if is_null($origin)} + {tr("identifies_itself_as", $clientName)}{else} + {tr("located_at_url", $origin)}{/if}, {_wants_your_token}. +
+ +
+ {_app_will_have_access_to}
+ {_oauth_scope_all|noescape}. +
+ +
+ + {_oauth_deny} +
+
+
+ + {script "js/node_modules/msgpack-lite/dist/msgpack.min.js"} + {script "js/al_api.js"} + + + diff --git a/Web/routes.yml b/Web/routes.yml index 51e76675..c1941d92 100644 --- a/Web/routes.yml +++ b/Web/routes.yml @@ -377,6 +377,8 @@ routes: handler: "VKAPI->route" - url: "/token" handler: "VKAPI->tokenLogin" + - url: "/authorize" + handler: "VKAPI->OAuthLogin" - url: "/admin/sandbox" handler: "About->sandbox" - url: "/admin/chandler/groups" diff --git a/Web/static/css/main.css b/Web/static/css/main.css index 84184b04..37b8b354 100644 --- a/Web/static/css/main.css +++ b/Web/static/css/main.css @@ -427,6 +427,22 @@ h1 { text-transform: lowercase; } +.action_links.disable>a, +.action_links.disable>form>input, +.action_links.disable { + cursor: not-allowed; + color: grey; +} + +.action_links.loading::after { + content: ""; + display: inline-block; + background-image: url('/assets/packages/static/openvk/img/loading_mini.gif'); + width: 30px; + height: 7px; + margin-left: 5px; +} + .profile_link.disable>a, .profile_link.disable { cursor: not-allowed; @@ -587,6 +603,11 @@ input[type=radio]:hover { background-position: 0 -28px; } +input[type=checkbox]:disabled { + background-position: 0 -28px; + cursor: initial; +} + input[type=checkbox]:checked, input[type=radio]:checked { background-position: 0 -14px; @@ -597,6 +618,10 @@ input[type=radio]:checked:hover { background-position: 0 -42px; } +input[type=checkbox]:checked:disabled { + background-position: 0 -42px; +} + #auth { padding: 10px; } @@ -2059,20 +2084,17 @@ table td[width="120"] { font-weight: bold; margin-right: 10px; display: inline-block; + border-radius: 2px; } .mb_tab div { - padding: 3px 7px; + padding: 5px 9px; } .mb_tab#active { background-color: #898989; } -.mb_tab#active div { - border: 2px solid #5f5f5f; -} - .mb_tab#active a { color: white; } diff --git a/Web/static/js/openvk.cls.js b/Web/static/js/openvk.cls.js index a4f5cd06..4ab91720 100644 --- a/Web/static/js/openvk.cls.js +++ b/Web/static/js/openvk.cls.js @@ -167,6 +167,23 @@ document.addEventListener("DOMContentLoaded", function() { //BEGIN return false; }); + u("#_submitUserSubscriptionAction").handle("submit", async function(e) { + u(this).nodes[0].parentElement.classList.add('loading'); + u(this).nodes[0].parentElement.classList.add('disable'); + console.log(e.target); + const data = await fetch(u(this).attr('action'), { method: 'POST', body: new FormData(e.target) }); + if (data.ok) { + u(this).nodes[0].parentElement.classList.remove('loading'); + u(this).nodes[0].parentElement.classList.remove('disable'); + if (e.target[0].value == "add") { + u(this).nodes[0].parentElement.innerHTML = tr("friends_add_msg"); + } else if (e.target[0].value == "rej") { + u(this).nodes[0].parentElement.innerHTML = tr("friends_rej_msg"); + } else if (e.target[0].value == "rem") { + u(this).nodes[0].parentElement.innerHTML = tr("friends_rem_msg"); + } + } + }) }); //END ONREADY DECLS async function repostPost(id, hash) { diff --git a/bootstrap.php b/bootstrap.php index 3ed9689a..0e7bdb90 100644 --- a/bootstrap.php +++ b/bootstrap.php @@ -200,7 +200,7 @@ function ovk_strftime_safe(string $format, ?int $timestamp = NULL): string { $sessionOffset = intval(Session::i()->get("_timezoneOffset")); $str = strftime($format, $timestamp + ($sessionOffset * MINUTE) * -1 ?? time() + ($sessionOffset * MINUTE) * -1, tr("__locale") !== '@__locale' ? tr("__locale") : NULL); - if(PHP_SHLIB_SUFFIX === "dll") { + if(PHP_SHLIB_SUFFIX === "dll" && version_compare(PHP_VERSION, "8.1.0", "<")) { $enc = tr("__WinEncoding"); if($enc === "@__WinEncoding") $enc = "Windows-1251"; @@ -232,7 +232,7 @@ function ovk_is_ssl(): bool return $GLOBALS["requestIsSSL"]; } -function parseAttachments(string $attachments) +function parseAttachments(string $attachments): array { $attachmentsArr = explode(",", $attachments); $returnArr = []; @@ -249,9 +249,10 @@ function parseAttachments(string $attachments) elseif(str_contains($attachment, "audio")) $attachmentType = "audio"; - $attachmentIds = str_replace($attachmentType, "", $attachment); - $attachmentOwner = (int)explode("_", $attachmentIds)[0]; - $attachmentId = (int)end(explode("_", $attachmentIds)); + $attachmentIds = str_replace($attachmentType, "", $attachment); + $attachmentOwner = (int) explode("_", $attachmentIds)[0]; + $gatoExplotano = explode("_", $attachmentIds); + $attachmentId = (int) end($gatoExplotano); switch($attachmentType) { case "photo": diff --git a/composer.json b/composer.json index 53d6025c..57810cd1 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,6 @@ "require": { "php": "~7.3||~8.1", "guzzlehttp/guzzle": "^6.5", - "komeiji-satori/curl": "dev-master", "whichbrowser/parser": "dev-master", "james-heinrich/getid3": "^1.9@dev", "rybakit/msgpack": "dev-master", @@ -11,7 +10,7 @@ "ezyang/htmlpurifier": "dev-master", "scssphp/scssphp": "dev-main", "lfkeitel/phptotp": "dev-master", - "chillerlan/php-qrcode": "dev-main", + "chillerlan/php-qrcode": "5.0.2", "vearutop/php-obscene-censor-rus": "dev-master", "erusev/parsedown": "dev-master", "bhaktaraz/php-rss-generator": "dev-master", @@ -20,7 +19,8 @@ "symfony/console": "5.4.x-dev", "wapmorgan/morphos": "dev-master", "ext-sodium": "*", - "php81_bc/strftime": "^0.0.2" + "php81_bc/strftime": "^0.0.2", + "ext-iconv": "*" }, - "minimum-stability": "dev" + "minimum-stability": "beta" } diff --git a/composer.lock b/composer.lock index f5b47f0b..42db2497 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "21afd8f0eb467e72345f83515fefb511", + "content-hash": "0d3b0eb1916eaf088444ef637743284a", "packages": [ { "name": "al/emoji-detector", @@ -103,16 +103,16 @@ }, { "name": "chillerlan/php-qrcode", - "version": "dev-main", + "version": "5.0.2", "source": { "type": "git", "url": "https://github.com/chillerlan/php-qrcode.git", - "reference": "a301af5b7faa7fcd690b29f38b283616a7d93b89" + "reference": "da5bdb82c8755f54de112b271b402aaa8df53269" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/a301af5b7faa7fcd690b29f38b283616a7d93b89", - "reference": "a301af5b7faa7fcd690b29f38b283616a7d93b89", + "url": "https://api.github.com/repos/chillerlan/php-qrcode/zipball/da5bdb82c8755f54de112b271b402aaa8df53269", + "reference": "da5bdb82c8755f54de112b271b402aaa8df53269", "shasum": "" }, "require": { @@ -121,19 +121,18 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "chillerlan/php-authenticator": "^4.0 || ^5.0", + "chillerlan/php-authenticator": "^4.1 || ^5.1", "phan/phan": "^5.4", - "phpmd/phpmd": "^2.13", + "phpmd/phpmd": "^2.15", "phpunit/phpunit": "^9.6", "setasign/fpdf": "^1.8.2", - "squizlabs/php_codesniffer": "^3.7" + "squizlabs/php_codesniffer": "^3.8" }, "suggest": { "chillerlan/php-authenticator": "Yet another Google authenticator! Also creates URIs for mobile apps.", "setasign/fpdf": "Required to use the QR FPDF output.", "simple-icons/simple-icons": "SVG icons that you can use to embed as logos in the QR Code" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -194,20 +193,20 @@ "type": "ko_fi" } ], - "time": "2023-11-24T15:47:26+00:00" + "time": "2024-02-27T14:37:26+00:00" }, { "name": "chillerlan/php-settings-container", - "version": "3.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/chillerlan/php-settings-container.git", - "reference": "4d02944424fa1f48abca96353257c93cbac856c1" + "reference": "8f93648fac8e6bacac8e00a8d325eba4950295e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/4d02944424fa1f48abca96353257c93cbac856c1", - "reference": "4d02944424fa1f48abca96353257c93cbac856c1", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/8f93648fac8e6bacac8e00a8d325eba4950295e6", + "reference": "8f93648fac8e6bacac8e00a8d325eba4950295e6", "shasum": "" }, "require": { @@ -216,9 +215,9 @@ }, "require-dev": { "phan/phan": "^5.4", - "phpmd/phpmd": "^2.13", - "phpunit/phpunit": "^10.2", - "squizlabs/php_codesniffer": "^3.7" + "phpmd/phpmd": "^2.15", + "phpunit/phpunit": "^10.5", + "squizlabs/php_codesniffer": "^3.9" }, "type": "library", "autoload": { @@ -259,7 +258,7 @@ "type": "ko_fi" } ], - "time": "2023-07-17T20:46:37+00:00" + "time": "2024-03-02T20:07:15+00:00" }, { "name": "erusev/parsedown", @@ -267,12 +266,12 @@ "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "77947eda2fdaf06b181c63a7db13e38968306aee" + "reference": "1ff038273949df7d6a455352659a878f3c89b29c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/77947eda2fdaf06b181c63a7db13e38968306aee", - "reference": "77947eda2fdaf06b181c63a7db13e38968306aee", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/1ff038273949df7d6a455352659a878f3c89b29c", + "reference": "1ff038273949df7d6a455352659a878f3c89b29c", "shasum": "" }, "require": { @@ -310,7 +309,7 @@ "issues": "https://github.com/erusev/parsedown/issues", "source": "https://github.com/erusev/parsedown/tree/master" }, - "time": "2023-10-13T08:10:28+00:00" + "time": "2024-03-12T05:27:45+00:00" }, { "name": "ezyang/htmlpurifier", @@ -318,16 +317,16 @@ "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c" + "reference": "4828fdf45a93eeeacfcbcc855f96f9a7e6b4ed44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/bbc513d79acf6691fa9cf10f192c90dd2957f18c", - "reference": "bbc513d79acf6691fa9cf10f192c90dd2957f18c", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/4828fdf45a93eeeacfcbcc855f96f9a7e6b4ed44", + "reference": "4828fdf45a93eeeacfcbcc855f96f9a7e6b4ed44", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -370,13 +369,13 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.17.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/master" }, - "time": "2023-11-17T15:01:25+00:00" + "time": "2024-03-13T03:41:45+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "6.5.x-dev", + "version": "6.5.8", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", @@ -491,7 +490,7 @@ }, { "name": "guzzlehttp/promises", - "version": "1.5.x-dev", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", @@ -509,7 +508,6 @@ "require-dev": { "symfony/phpunit-bridge": "^4.4 || ^5.1" }, - "default-branch": true, "type": "library", "autoload": { "files": [ @@ -571,7 +569,7 @@ }, { "name": "guzzlehttp/psr7", - "version": "1.9.x-dev", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", @@ -656,7 +654,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.9" + "source": "https://github.com/guzzle/psr7/tree/1.9.1" }, "funding": [ { @@ -680,12 +678,12 @@ "source": { "type": "git", "url": "https://github.com/JamesHeinrich/getID3.git", - "reference": "58b883d0bf279bad8e7c0bd432e10ad4711b23a0" + "reference": "143af3325ee40e77c5d041d3f674c8bdd4762dc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/58b883d0bf279bad8e7c0bd432e10ad4711b23a0", - "reference": "58b883d0bf279bad8e7c0bd432e10ad4711b23a0", + "url": "https://api.github.com/repos/JamesHeinrich/getID3/zipball/143af3325ee40e77c5d041d3f674c8bdd4762dc7", + "reference": "143af3325ee40e77c5d041d3f674c8bdd4762dc7", "shasum": "" }, "require": { @@ -740,71 +738,20 @@ "issues": "https://github.com/JamesHeinrich/getID3/issues", "source": "https://github.com/JamesHeinrich/getID3/tree/master" }, - "time": "2023-11-10T14:04:34+00:00" - }, - { - "name": "komeiji-satori/curl", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/komeiji-satori/curl.git", - "reference": "687d8fa621823809f5e90a7f5d2fd6a59b7e7948" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/komeiji-satori/curl/zipball/687d8fa621823809f5e90a7f5d2fd6a59b7e7948", - "reference": "687d8fa621823809f5e90a7f5d2fd6a59b7e7948", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "php": ">=5.6" - }, - "default-branch": true, - "type": "library", - "autoload": { - "files": [ - "src/cURL.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Satori", - "email": "i@ttt.moe" - } - ], - "description": "一个轻量级的PHP网络操作类,实现GET、POST、UPLOAD、DOWNLOAD常用操作,出错自动重试,支持链式写法", - "homepage": "https://github.com/komeiji-satori/curl", - "keywords": [ - "PHP cURL", - "curl download", - "curl library", - "curl lightweight", - "curl post", - "curl upload" - ], - "support": { - "issues": "https://github.com/komeiji-satori/curl/issues", - "source": "https://github.com/komeiji-satori/curl/tree/master" - }, - "time": "2019-04-20T16:06:47+00:00" + "time": "2024-03-26T12:26:30+00:00" }, { "name": "league/uri", - "version": "dev-master", + "version": "7.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5" + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bf414ba956d902f5d98bf9385fcf63954f09dce5", - "reference": "bf414ba956d902f5d98bf9385fcf63954f09dce5", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", "shasum": "" }, "require": { @@ -824,7 +771,6 @@ "php-64bit": "to improve IPV4 host parsing", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -874,7 +820,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.0" + "source": "https://github.com/thephpleague/uri/tree/7.4.1" }, "funding": [ { @@ -882,20 +828,20 @@ "type": "github" } ], - "time": "2023-12-01T06:24:25+00:00" + "time": "2024-03-23T07:42:40+00:00" }, { "name": "league/uri-interfaces", - "version": "dev-master", + "version": "7.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3" + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/bd8c487ec236930f7bbc42b8d374fa882fbba0f3", - "reference": "bd8c487ec236930f7bbc42b8d374fa882fbba0f3", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", + "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", "shasum": "" }, "require": { @@ -911,7 +857,6 @@ "php-64bit": "to improve IPV4 host parsing", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -959,7 +904,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" }, "funding": [ { @@ -967,7 +912,7 @@ "type": "github" } ], - "time": "2023-11-24T15:40:42+00:00" + "time": "2024-03-23T07:42:40+00:00" }, { "name": "lfkeitel/phptotp", @@ -1052,29 +997,25 @@ }, { "name": "psr/cache", - "version": "dev-master", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/cache.git", - "reference": "0a7c67d0d1c8167b342eb74339d6f961663826ce" + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/0a7c67d0d1c8167b342eb74339d6f961663826ce", - "reference": "0a7c67d0d1c8167b342eb74339d6f961663826ce", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { "php": ">=8.0.0" }, - "suggest": { - "fig/cache-util": "Provides some useful PSR-6 utilities" - }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -1099,28 +1040,27 @@ "psr-6" ], "support": { - "source": "https://github.com/php-fig/cache/tree/master" + "source": "https://github.com/php-fig/cache/tree/3.0.0" }, - "time": "2021-02-24T03:25:37+00:00" + "time": "2021-02-03T23:26:27+00:00" }, { "name": "psr/container", - "version": "dev-master", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "707984727bd5b2b670e59559d3ed2500240cf875" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/707984727bd5b2b670e59559d3ed2500240cf875", - "reference": "707984727bd5b2b670e59559d3ed2500240cf875", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1153,29 +1093,28 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2023-09-22T11:11:30+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/http-factory", - "version": "dev-master", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "7037f4b0950474e9d1350e8df89b15f1842085f6" + "reference": "e616d01114759c4c489f93b099585439f795fe35" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/7037f4b0950474e9d1350e8df89b15f1842085f6", - "reference": "7037f4b0950474e9d1350e8df89b15f1842085f6", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", "shasum": "" }, "require": { "php": ">=7.0.0", "psr/http-message": "^1.0 || ^2.0" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1197,7 +1136,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -1209,9 +1148,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory" + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" }, - "time": "2023-09-22T11:16:44+00:00" + "time": "2023-04-10T20:10:41+00:00" }, { "name": "psr/http-message", @@ -1379,12 +1318,12 @@ "source": { "type": "git", "url": "https://github.com/scssphp/scssphp.git", - "reference": "277f0a60d60b415644249628707547cd3925ca28" + "reference": "5659341b5da400dafd5672171215f4534c06236b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/scssphp/scssphp/zipball/277f0a60d60b415644249628707547cd3925ca28", - "reference": "277f0a60d60b415644249628707547cd3925ca28", + "url": "https://api.github.com/repos/scssphp/scssphp/zipball/5659341b5da400dafd5672171215f4534c06236b", + "reference": "5659341b5da400dafd5672171215f4534c06236b", "shasum": "" }, "require": { @@ -1453,7 +1392,7 @@ "issues": "https://github.com/scssphp/scssphp/issues", "source": "https://github.com/scssphp/scssphp/tree/main" }, - "time": "2023-11-15T09:37:41+00:00" + "time": "2024-01-13T13:17:46+00:00" }, { "name": "symfony/console", @@ -1461,12 +1400,12 @@ "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "4b4d8cd118484aa604ec519062113dd87abde18c" + "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/4b4d8cd118484aa604ec519062113dd87abde18c", - "reference": "4b4d8cd118484aa604ec519062113dd87abde18c", + "url": "https://api.github.com/repos/symfony/console/zipball/39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", + "reference": "39f75d9d73d0c11952fdcecf4877b4d0f62a8f6e", "shasum": "" }, "require": { @@ -1552,11 +1491,11 @@ "type": "tidelift" } ], - "time": "2023-12-08T13:33:03+00:00" + "time": "2024-02-20T16:33:57+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "dev-main", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -1571,7 +1510,6 @@ "require": { "php": ">=8.1" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1624,20 +1562,20 @@ }, { "name": "symfony/filesystem", - "version": "7.1.x-dev", + "version": "v6.4.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" + "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb", + "reference": "7f3b1755eb49297a0827a7575d5d2b2fd11cc9fb", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, @@ -1667,7 +1605,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.0-RC1" + "source": "https://github.com/symfony/filesystem/tree/v6.4.3" }, "funding": [ { @@ -1683,20 +1621,20 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:33:22+00:00" + "time": "2024-01-23T14:51:35+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ef4d7e442ca910c4764bce785146269b30cb5fc4", + "reference": "ef4d7e442ca910c4764bce785146269b30cb5fc4", "shasum": "" }, "require": { @@ -1708,12 +1646,8 @@ "suggest": { "ext-ctype": "For best performance" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1750,7 +1684,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.29.0" }, "funding": [ { @@ -1766,20 +1700,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", "shasum": "" }, "require": { @@ -1788,12 +1722,8 @@ "suggest": { "ext-intl": "For best performance" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1832,7 +1762,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" }, "funding": [ { @@ -1848,20 +1778,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", + "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", "shasum": "" }, "require": { @@ -1872,12 +1802,8 @@ "suggest": { "ext-intl": "For best performance" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -1920,7 +1846,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" }, "funding": [ { @@ -1936,20 +1862,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", + "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", "shasum": "" }, "require": { @@ -1958,12 +1884,8 @@ "suggest": { "ext-intl": "For best performance" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -2005,7 +1927,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" }, "funding": [ { @@ -2021,20 +1943,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", "shasum": "" }, "require": { @@ -2046,12 +1968,8 @@ "suggest": { "ext-mbstring": "For best performance" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -2089,7 +2007,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" }, "funding": [ { @@ -2105,31 +2023,27 @@ "type": "tidelift" } ], - "time": "2023-07-28T09:04:16+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php72", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", + "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", "shasum": "" }, "require": { "php": ">=7.1" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -2166,7 +2080,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" }, "funding": [ { @@ -2182,31 +2096,27 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php73", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/21bd091060673a1177ae842c0ef8fe30893114d2", + "reference": "21bd091060673a1177ae842c0ef8fe30893114d2", "shasum": "" }, "require": { "php": ">=7.1" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -2246,7 +2156,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.29.0" }, "funding": [ { @@ -2262,31 +2172,27 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/polyfill-php80", - "version": "1.x-dev", + "version": "v1.29.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", "shasum": "" }, "require": { "php": ">=7.1" }, - "default-branch": true, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" @@ -2330,7 +2236,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" }, "funding": [ { @@ -2346,30 +2252,29 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-01-29T20:11:03+00:00" }, { "name": "symfony/service-contracts", - "version": "dev-main", + "version": "v3.4.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/fe07cbc8d837f60caf7018068e350cc5163681a0", + "reference": "fe07cbc8d837f60caf7018068e350cc5163681a0", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -2413,7 +2318,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.1" }, "funding": [ { @@ -2429,20 +2334,20 @@ "type": "tidelift" } ], - "time": "2023-07-30T20:28:31+00:00" + "time": "2023-12-26T14:02:43+00:00" }, { "name": "symfony/string", - "version": "6.4.x-dev", + "version": "v6.4.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc" + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/7cb80bc10bfcdf6b5492741c0b9357dac66940bc", - "reference": "7cb80bc10bfcdf6b5492741c0b9357dac66940bc", + "url": "https://api.github.com/repos/symfony/string/zipball/4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", + "reference": "4e465a95bdc32f49cf4c7f07f751b843bbd6dcd9", "shasum": "" }, "require": { @@ -2499,7 +2404,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/6.4" + "source": "https://github.com/symfony/string/tree/v6.4.4" }, "funding": [ { @@ -2515,7 +2420,7 @@ "type": "tidelift" } ], - "time": "2023-12-10T16:15:48+00:00" + "time": "2024-02-01T13:16:41+00:00" }, { "name": "vearutop/php-obscene-censor-rus", @@ -2620,12 +2525,12 @@ "source": { "type": "git", "url": "https://github.com/wapmorgan/Morphos.git", - "reference": "3dcf53986e59f6117f902a10849b349504fe3fcd" + "reference": "302b56636cf604ad07e20020076d8a4880554286" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/wapmorgan/Morphos/zipball/3dcf53986e59f6117f902a10849b349504fe3fcd", - "reference": "3dcf53986e59f6117f902a10849b349504fe3fcd", + "url": "https://api.github.com/repos/wapmorgan/Morphos/zipball/302b56636cf604ad07e20020076d8a4880554286", + "reference": "302b56636cf604ad07e20020076d8a4880554286", "shasum": "" }, "require": { @@ -2687,7 +2592,7 @@ "issues": "https://github.com/wapmorgan/Morphos/issues", "source": "https://github.com/wapmorgan/Morphos/tree/master" }, - "time": "2023-08-13T08:10:32+00:00" + "time": "2024-03-26T07:24:27+00:00" }, { "name": "whichbrowser/parser", @@ -2757,9 +2662,8 @@ ], "packages-dev": [], "aliases": [], - "minimum-stability": "dev", + "minimum-stability": "beta", "stability-flags": { - "komeiji-satori/curl": 20, "whichbrowser/parser": 20, "james-heinrich/getid3": 20, "rybakit/msgpack": 20, @@ -2768,7 +2672,6 @@ "ezyang/htmlpurifier": 20, "scssphp/scssphp": 20, "lfkeitel/phptotp": 20, - "chillerlan/php-qrcode": 20, "vearutop/php-obscene-censor-rus": 20, "erusev/parsedown": 20, "bhaktaraz/php-rss-generator": 20, @@ -2784,5 +2687,5 @@ "ext-sodium": "*" }, "platform-dev": [], - "plugin-api-version": "2.6.0" + "plugin-api-version": "2.3.0" } diff --git a/install/automated/common/openvk.template.yml b/install/automated/common/openvk.template.yml index 95f21b70..bcf3888b 100644 --- a/install/automated/common/openvk.template.yml +++ b/install/automated/common/openvk.template.yml @@ -63,7 +63,6 @@ openvk: caption: "Ad caption" link: "https://example.org/product.aspx?id=10&from=ovk" bellsAndWhistles: - fartscroll: false testLabel: false defaultMobileTheme: "" diff --git a/install/automated/docker/openvk.Dockerfile b/install/automated/docker/openvk.Dockerfile index b78f6980..274d5b6f 100644 --- a/install/automated/docker/openvk.Dockerfile +++ b/install/automated/docker/openvk.Dockerfile @@ -23,7 +23,7 @@ RUN mkdir openvk WORKDIR /opt/chandler/extensions/available/openvk -ADD . . +ADD composer.* . RUN composer install @@ -33,10 +33,14 @@ COPY --from=builder /opt/chandler /opt/chandler WORKDIR /opt/chandler/extensions/available/openvk/Web/static/js +ADD Web/static/js/package.json Web/static/js/package-lock.json Web/static/js/yarn.lock ./ + RUN yarn install WORKDIR /opt/chandler/extensions/available/openvk +ADD . . + ARG GITREPO=openvk/openvk FROM ghcr.io/${GITREPO}/php:8.2-apache diff --git a/install/automated/docker/openvk.example.yml b/install/automated/docker/openvk.example.yml index c5d3ebb2..0fc129ae 100644 --- a/install/automated/docker/openvk.example.yml +++ b/install/automated/docker/openvk.example.yml @@ -101,7 +101,6 @@ openvk: caption: "Ad caption" link: "https://example.org/product.aspx?id=10&from=ovk" bellsAndWhistles: - fartscroll: false testLabel: false defaultMobileTheme: "" defaultFeaturePhoneTheme: "" diff --git a/install/automated/kubernetes/manifests/001-configmap.yaml b/install/automated/kubernetes/manifests/001-configmap.yaml index 1f7f85c9..3e880aa8 100644 --- a/install/automated/kubernetes/manifests/001-configmap.yaml +++ b/install/automated/kubernetes/manifests/001-configmap.yaml @@ -97,7 +97,6 @@ data: caption: "Ad caption" link: "https://example.org/product.aspx?id=10&from=ovk" bellsAndWhistles: - fartscroll: false testLabel: false defaultMobileTheme: "" diff --git a/install/sqls/00045-enforce-hiding-from-global-feed.sql b/install/sqls/00045-enforce-hiding-from-global-feed.sql new file mode 100644 index 00000000..50305462 --- /dev/null +++ b/install/sqls/00045-enforce-hiding-from-global-feed.sql @@ -0,0 +1 @@ +ALTER TABLE `groups` ADD COLUMN `enforce_hiding_from_global_feed` boolean NOT NULL DEFAULT 0 AFTER `hide_from_global_feed`; diff --git a/install/sqls/00046-deny-request.sql b/install/sqls/00046-deny-request.sql new file mode 100755 index 00000000..0cea83d8 --- /dev/null +++ b/install/sqls/00046-deny-request.sql @@ -0,0 +1 @@ +ALTER TABLE `subscriptions` ADD `flags` tinyint(3) unsigned NOT NULL DEFAULT '0' AFTER `target` \ No newline at end of file diff --git a/locales/by.strings b/locales/by.strings index 1257ef06..21c6b094 100755 --- a/locales/by.strings +++ b/locales/by.strings @@ -131,6 +131,7 @@ "friends_delete" = "Выдаліць з сяброў"; "friends_reject" = "Адмяніць заяўку"; "friends_accept" = "Прыняць заяўку"; +"friends_leave_in_flw" = "Пакінуть у падпісчыках"; "send_message" = "Адправіць паведамленне"; "incoming_req" = "Падпісанты"; "outcoming_req" = "Заяўкі"; diff --git a/locales/en.strings b/locales/en.strings index a9155d0a..9a8ddc52 100644 --- a/locales/en.strings +++ b/locales/en.strings @@ -184,10 +184,10 @@ "post_writes_g" = "published"; "post_deact_m" = "deleted his profile saying:"; "post_deact_f" = "deleted her profile saying:"; -"post_deact_g" = "deleted they profile saying:"; +"post_deact_g" = "deleted their profile saying:"; "post_deact_silent_m" = "silently deleted his profile."; "post_deact_silent_f" = "silently deleted her profile."; -"post_deact_silent_f" = "silently deleted they profile."; +"post_deact_silent_f" = "silently deleted their profile."; "post_on_your_wall" = "on your wall"; "post_on_group_wall" = "in $1"; "post_on_user_wall" = "on $1's wall"; @@ -259,6 +259,10 @@ "friends_delete" = "Remove from friends"; "friends_reject" = "Reject request"; "friends_accept" = "Accept request"; +"friends_leave_in_flw" = "Leave in followers"; +"friends_add_msg" = "Now you're friends."; +"friends_rej_msg" = "You left this user as subscriber."; +"friends_rem_msg" = "You deleted this user from your friend list."; "send_message" = "Send a message"; "incoming_req" = "Pending"; "outcoming_req" = "Outgoing"; @@ -481,6 +485,7 @@ "upd_m" = "updated his profile picture"; "upd_f" = "updated her profile picture"; +"upd_n" = "updated their profile picture"; "upd_g" = "updated group's picture"; "add_photos" = "Add photos"; @@ -777,6 +782,15 @@ "disable_2fa" = "Turn off 2FA"; "viewing" = "View"; +/* OAuth */ +"identifies_itself_as" = "that identifies itself as $1"; +"located_at_url" = "located at $1"; +"wants_your_token" = "wants to access your account"; +"app_will_have_access_to" = "App will have access to:"; +"oauth_scope_all" = "profile information, status, list of friends, photos, wall posts, audios, videos, notifications, fishing rod handle, messages, gifts, your e-mail, polls, communities, discussions, notes, payment method, likes and comments"; +"oauth_grant" = "Allow"; +"oauth_deny" = "Deny"; + /* Sorting */ "sort_randomly" = "Sort randomly"; @@ -832,7 +846,7 @@ "limits" = "Limits"; "select_audio" = "Select audio from your computer"; -"audio_requirements" = "Audio must be between $1s to $2 minutes, weights to $3MB and contain audio stream."; +"audio_requirements" = "Audio must be between $1 seconds to $2 minutes, weights to $3 MB and contain audio stream."; "audio_requirements_2" = "Audio must not infringe copyright and related rights"; "you_can_also_add_audio_using" = "You can also add audio from among the files you have already downloaded using"; "search_audio_inst" = "audios search"; @@ -840,7 +854,7 @@ "audio_embed_not_found" = "Audio not found"; "audio_embed_deleted" = "Audio was deleted"; "audio_embed_withdrawn" = "The audio was withdrawn at the request of the copyright holder"; -"audio_embed_forbidden" = "The user's privacy settings do not allow this embed this audio"; +"audio_embed_forbidden" = "The user's privacy settings do not allow this audio to be embedded"; "audio_embed_processing" = "Audio is still being processed, or has not been processed correctly."; "audios_count_zero" = "No audios"; @@ -1190,6 +1204,7 @@ "report_number" = "Report #"; "list_of_reports" = "List of reports"; "text_of_the_post" = "Text of the post"; +"delete_content" = "Delete content"; "today" = "today"; "will_be_watched" = "It will be reviewed by the moderators soon"; @@ -1582,6 +1597,7 @@ "admin_user_online_deceased" = "Deceased"; "admin_club_search" = "Search for groups"; "admin_club_excludeglobalfeed" = "Do not display posts in the global feed"; +"admin_club_enforceexcludeglobalfeed" = "Disallow group staff from changing global feed status"; "admin_services" = "Paid services"; "admin_newgift" = "New gift"; @@ -1617,6 +1633,9 @@ "admin_commerce_disabled" = "Commerce has been disabled by the system administrator"; "admin_commerce_disabled_desc" = "The voucher and gift settings will be saved, but will have no effect."; +"admin_longpool_broken" = "Longpool is broken and will not work!"; +"admin_longpool_broken_desc" = "Make sure file at the path $1 exist and have correct rights and ownership."; + "admin_banned_links" = "Blocked links"; "admin_banned_link" = "Link"; "admin_banned_domain" = "Domain"; @@ -1700,7 +1719,7 @@ "about_wall_posts_one" = "1 wall post"; "about_wall_posts_other" = "$1 wall posts"; -"about_watch_rules" = "Watch here."; +"about_watch_rules" = "See here."; /* Dialogs */ @@ -1910,9 +1929,9 @@ "tour_section_11_title_1" = "Themes"; "tour_section_11_text_1" = "Upon registration, the default theme will be set as your appearance."; "tour_section_11_text_2" = "Some new users might find the current default theme a bit dated."; -"tour_section_11_text_3" = "No worries: You can create your own theme by reading the documentation or choose one from the catalog."; +"tour_section_11_text_3" = "No worries: You can create your own theme by reading the documentation or choose one from the catalog."; "tour_section_11_bottom_text_1" = "A catalog of themes is available under \"My Settings\" in the \"Interface\" tab."; -"tour_section_11_wordart" = ""; +"tour_section_11_wordart" = ""; "tour_section_12_title_1" = "Profile and Group Backgrounds"; "tour_section_12_text_1" = "You can set two images as the background of your page."; diff --git a/locales/hy.strings b/locales/hy.strings index 09a8e344..dd4901cc 100755 --- a/locales/hy.strings +++ b/locales/hy.strings @@ -1447,9 +1447,9 @@ "tour_section_11_title_1" = "Տեսքեր"; "tour_section_11_text_1" = "Գրանցվելուց հետո Ձեր էջում կիրառվում է սովորական տեսքը"; "tour_section_11_text_2" = "Որոշ նորեկները կարող է չսիրեն լռելյայն տեսքը, քանի որ այն անգամ հնության զգացում է տալիս"; -"tour_section_11_text_3" = "Բայց հլը հո՛պ. Դուք կարող եք անգամ ստեղծել Ձեր տեսքը ՝ կարդալով դոկումենտացիան, կամ էլ ընտրել եղածներից մեկը"; +"tour_section_11_text_3" = "Բայց հլը հո՛պ. Դուք կարող եք անգամ ստեղծել Ձեր տեսքը ՝ կարդալով դոկումենտացիան, կամ էլ ընտրել եղածներից մեկը"; "tour_section_11_bottom_text_1" = "Տեսքերի ցանկը հասանելի է "Իմ Կարգավորումներ" –ի "Ինտերֆեյս" բաժնում;"; -"tour_section_11_wordart" = ""; +"tour_section_11_wordart" = ""; "tour_section_12_title_1" = "Պրոֆիլ և խմբի ետնապատկերներ"; "tour_section_12_text_1" = "Դուք կարող եք երկու ետնապատկեր տեղադրել"; diff --git a/locales/ru.strings b/locales/ru.strings index 1ee718c6..c6728877 100644 --- a/locales/ru.strings +++ b/locales/ru.strings @@ -239,6 +239,10 @@ "friends_delete" = "Удалить из друзей"; "friends_reject" = "Отменить заявку"; "friends_accept" = "Принять заявку"; +"friends_leave_in_flw" = "Оставить в подписчиках"; +"friends_add_msg" = "Теперь вы друзья."; +"friends_rej_msg" = "Вы оставили пользователя в подписчиках."; +"friends_rem_msg" = "Вы удалили пользователя из списка своих друзей."; "send_message" = "Отправить сообщение"; "incoming_req" = "Входящие"; "outcoming_req" = "Исходящие"; @@ -739,6 +743,15 @@ "disable_2fa" = "Отключить 2FA"; "viewing" = "Просмотреть"; +/* OAuth */ +"identifies_itself_as" = "идентифицирующее себя как $1"; +"located_at_url" = "располагающееся по адресу $1"; +"wants_your_token" = "запрашивает доступ к вашему аккаунту"; +"app_will_have_access_to" = "Приложению будут доступны:"; +"oauth_scope_all" = "информация страницы, обновление статуса, список друзей, фотографии, публикация записей, аудиозаписи, видео, уведомления, сообщения, подарки, ваш адрес электронной почты, опросы, группы, обсуждения, заметки, голоса, лайки и комментарии"; +"oauth_grant" = "Разрешить"; +"oauth_deny" = "Отмена"; + /* Sorting */ "sort_randomly" = "Сортировать случайно"; @@ -1123,6 +1136,7 @@ "report_number" = "Жалоба №"; "list_of_reports" = "Список жалоб"; "text_of_the_post" = "Текст записи"; +"delete_content" = "Удалить контент"; "today" = "сегодня"; "will_be_watched" = "Скоро её рассмотрят модераторы"; @@ -1479,6 +1493,7 @@ "admin_user_online_deceased" = "Покойник"; "admin_club_search" = "Поиск групп"; "admin_club_excludeglobalfeed" = "Не отображать записи в глобальной ленте"; +"admin_club_enforceexcludeglobalfeed" = "Запретить руководству группы изменять отображение в глобальной ленте"; "admin_services" = "Платные услуги"; "admin_newgift" = "Новый подарок"; "admin_price" = "Цена"; @@ -1509,6 +1524,8 @@ "admin_about_instance" = "Инстанция"; "admin_commerce_disabled" = "Коммерция отключена системным администратором"; "admin_commerce_disabled_desc" = "Настройки ваучеров и подарков будут сохранены, но не будут оказывать никакого влияния."; +"admin_longpool_broken" = "Longpool сломан!"; +"admin_longpool_broken_desc" = "Проверьте, существует ли файл по пути $1 и выданы ли у него правильные права на запись."; "admin_banned_links" = "Заблокированные ссылки"; "admin_banned_link" = "Ссылка"; "admin_banned_domain" = "Домен"; @@ -1802,9 +1819,9 @@ "tour_section_11_title_1" = "Темы оформления"; "tour_section_11_text_1" = "После регистрации, в качестве оформления у вас будет установлена стандартная тема"; "tour_section_11_text_2" = "Некоторых новых пользователей может слегка отпугнуть нынешняя стоковая тема, которая веет совсем уж древностью"; -"tour_section_11_text_3" = "Но не беда: Вы можете создать свою тему для сайта, ознакомившись с документацией или выбрать уже существующую из каталога"; +"tour_section_11_text_3" = "Но не беда: Вы можете создать свою тему для сайта, ознакомившись с документацией или выбрать уже существующую из каталога"; "tour_section_11_bottom_text_1" = "Каталог тем доступен в разделе "Мои Настройки" во вкладке "Интерфейс" "; -"tour_section_11_wordart" = ""; +"tour_section_11_wordart" = ""; "tour_section_12_title_1" = "Фон профиля и группы"; "tour_section_12_text_1" = "Вы можете установить два изображения в качестве фона вашей страницы"; diff --git a/locales/ru_lat.strings b/locales/ru_lat.strings index 7f1308b7..2c2845a6 100644 --- a/locales/ru_lat.strings +++ b/locales/ru_lat.strings @@ -1669,9 +1669,9 @@ "tour_section_11_title_1" = "Temy oformlenija"; "tour_section_11_text_1" = "Posle registracii, v kačestve oformlenija u vas budet ustanovlena standartnaja tema"; "tour_section_11_text_2" = "Nekotoryh novyh polízovatelej možet slegka otpugnutí nynešnjaja stokovaja tema, kotoraja veet sovsem už drevnostíju"; -"tour_section_11_text_3" = "No ne beda: Vy možete sozdatí svoju temu dlja sajta, oznakomivšisí s dokumentaciej ili vybratí uže susčestvujusčuju iz kataloga"; +"tour_section_11_text_3" = "No ne beda: Vy možete sozdatí svoju temu dlja sajta, oznakomivšisí s dokumentaciej ili vybratí uže susčestvujusčuju iz kataloga"; "tour_section_11_bottom_text_1" = "Katalog tem dostupen v razdele "Moi Nastrojki" vo vkladke "Interfejs" "; -"tour_section_11_wordart" = ""; +"tour_section_11_wordart" = ""; "tour_section_12_title_1" = "Fon profilja i gruppy"; "tour_section_12_text_1" = "Vy možete ustanovití dva izobraženija v kačestve fona vašej stranicy"; diff --git a/locales/uk.strings b/locales/uk.strings index 52a02d10..4bb3152b 100644 --- a/locales/uk.strings +++ b/locales/uk.strings @@ -213,6 +213,7 @@ "friends_delete" = "Видалити з друзів"; "friends_reject" = "Скасувати заявку"; "friends_accept" = "Прийняти заявку"; +"friends_leave_in_flw" = "Залишити у підписниках"; "send_message" = "Відправити повідомлення"; "incoming_req" = "Підписники"; "outcoming_req" = "Вихідні"; @@ -1706,9 +1707,9 @@ "tour_section_11_title_1" = "Теми оформлення"; "tour_section_11_text_1" = "Після реєстрації, як стандартна тема, у вас буде класична тема оформлення"; "tour_section_11_text_2" = "Деяких нових користувачів може налякати чинна класична тема, яка виглядає дуже архаїчно"; -"tour_section_11_text_3" = "Але не біда: Ви можете обрати іншу тему з каталогу, або створити свою, ознаомившись з документацією"; +"tour_section_11_text_3" = "Але не біда: Ви можете обрати іншу тему з каталогу, або створити свою, ознаомившись з документацією"; "tour_section_11_bottom_text_1" = "Каталог тем доступний в розділі "Мої Налаштування" в вкладці "Інтерфейс" "; -"tour_section_11_wordart" = ""; +"tour_section_11_wordart" = ""; "tour_section_12_title_1" = "Фон профілю та групи"; "tour_section_12_text_1" = "Ви можете встановити одну чи два зображення як фон вашої сторінки"; diff --git a/openvk-example.yml b/openvk-example.yml index ee3b8149..25a4119c 100644 --- a/openvk-example.yml +++ b/openvk-example.yml @@ -101,7 +101,6 @@ openvk: caption: "Ad caption" link: "https://example.org/product.aspx?id=10&from=ovk" bellsAndWhistles: - fartscroll: false testLabel: false defaultMobileTheme: "" defaultFeaturePhoneTheme: "" diff --git a/themepacks/midnight/res/xmas.css b/themepacks/midnight/res/xmas.css index 10cc53bc..a7d610d4 100644 --- a/themepacks/midnight/res/xmas.css +++ b/themepacks/midnight/res/xmas.css @@ -1,7 +1,7 @@ .page_header { - background-image: url('/themepack/midnight/0.0.2.4/resource/xheader.png') !important; + background-image: url('/themepack/midnight/0.0.2.9/resource/xheader.png') !important; } .page_custom_header { - background-image: url('/themepack/midnight/0.0.2.4/resource/xheader_custom.png') !important; -} \ No newline at end of file + background-image: url('/themepack/midnight/0.0.2.9/resource/xheader_custom.png') !important; +} diff --git a/themepacks/midnight/stylesheet.css b/themepacks/midnight/stylesheet.css index c8dd1b84..4cdef046 100644 --- a/themepacks/midnight/stylesheet.css +++ b/themepacks/midnight/stylesheet.css @@ -6,7 +6,10 @@ html { color-scheme: dark !important; } -body, #backdropDripper, #standaloneCommentBox { +body, +#backdropDripper, +#standaloneCommentBox, +.ovk-photo-view { background-color: #0e0b1a; color: #c6d2e8; } @@ -15,11 +18,17 @@ body, #backdropDripper, #standaloneCommentBox { box-shadow: -30px 0px 20px 20px #0e0b1a, -50px 0px 20px 20px hsl(252 41% 7% / 59%), -70px 0px 20px 20px hsl(252 41% 7% / 43%), -90px 0px 20px 20px hsl(252 41% 7% / 35%), -110px 0px 20px 20px hsl(252 41% 7% / 28%), -130px 0px 20px 20px hsl(252 41% 7% / 16%), 30px 0px 20px 20px #0e0b1a, 50px 0px 20px 20px hsl(252 41% 7% / 59%), 70px 0px 20px 20px hsl(252 41% 7% / 43%), 90px 0px 20px 20px hsl(252 41% 7% / 35%), 110px 0px 20px 20px hsl(252 41% 7% / 28%), 130px 0px 20px 20px hsl(252 41% 7% / 16%); } -span, .post-author .date, .crp-entry--message---text, .messenger-app--messages---message .time, .navigation-lang .link_new, .tippy-box text { +span, +.post-author .date, +.crp-entry--message---text, +.messenger-app--messages---message .time, +.navigation-lang .link_new, +.tippy-box text { color: #8b9ab5 !important; } -.nobold, nobold { +.nobold, +nobold { color: #6f82a8; } @@ -31,15 +40,103 @@ span, .post-author .date, .crp-entry--message---text, .messenger-app--messages-- color: #8eb2d0; } -.wrap1, .wrap2, .page-wrap, #wrapH, #wrapHI { +.wrap1, +.wrap2, +.page-wrap, +#wrapH, +#wrapHI { border-color: #1c202f; } -.accountInfo, .left_small_block, #profile_link, .profile_link, .navigation .link, .navigation .link:hover, .navigation_footer .link, .navigation_footer .link:hover, .completeness-gauge, input[type="text"], input[type="password"], input[type~="text"], input[type~="password"], input[type="email"], input[type="phone"], input[type~="email"], input[type~="phone"], input[type="search"], input[type~="search"], input[type~="date"], select, .content_title_expanded, .content_title_unexpanded, .content_subtitle, textarea, .post-content, .post-author, hr, h4, .postFeedWrapper, .tabs, #wallAttachmentMenu, .ovk-diag, .ovk-diag-head, #ovkDraw, #ovkDraw .literally .lc-picker, .literally .lc-options.horz-toolbar, .page_wrap, .container_gray .content, .summaryBar, .groups_options, form[action="/search"] > input, .header_search_input, .header_search_inputbt, .accent-box, .page_status_popup, .messenger-app--input, .messenger-app, .crp-entry:first-of-type, .crp-list, .crp-entry, .note_footer, .page_content > div, #editor, .note_header, center[style="background: white;border: #DEDEDE solid 1px;"], .album-photo img, .mb_tabs, .mb_tab#active div, .navigation-lang .link_new, #faqhead, #faqcontent, .post-divider, .comment, .commentsTextFieldWrap, tr, td, th, #votesBalance, .paginator a.active, .paginator a:hover, .topic-list-item, #userContent blockquote, .tippy-box[data-theme~="vk"], .poll, #standaloneCommentBox, .searchBtn, .searchList #used, .searchOptionName, .borderup, #tour, #auth, .ovk-photo-view, .searchOptions { +.accountInfo, +.left_small_block, +#profile_link, +.profile_link, +.navigation .link, +.navigation .link:hover, +.navigation_footer .link, +.navigation_footer .link:hover, +.completeness-gauge, +input[type="text"], +input[type="password"], +input[type~="text"], +input[type~="password"], +input[type="email"], +input[type="phone"], +input[type~="email"], +input[type~="phone"], +input[type="search"], +input[type~="search"], +input[type~="date"], +select, +.content_title_expanded, +.content_title_unexpanded, +.content_subtitle, +textarea, +.post-content, +.post-author, +hr, +h4, +.postFeedWrapper, +.tabs, +#wallAttachmentMenu, +.ovk-diag, +.ovk-diag-head, +#ovkDraw, +#ovkDraw .literally .lc-picker, +.literally .lc-options.horz-toolbar, +.page_wrap, +.container_gray .content, +.summaryBar, +.groups_options, +form[action="/search"]>input, +.header_search_input, +.header_search_inputbt, +.accent-box, +.page_status_popup, +.messenger-app--input, +.messenger-app, +.crp-entry:first-of-type, +.crp-list, +.crp-entry, +.note_footer, +.page_content>div, +#editor, +.note_header, +center[style="background: white;border: #DEDEDE solid 1px;"], +.album-photo img, +.mb_tabs, +.mb_tab#active div, +.navigation-lang .link_new, +#faqhead, +#faqcontent, +.post-divider, +.comment, +.commentsTextFieldWrap, +tr, +td, +th, +#votesBalance, +.paginator a.active, +.paginator a:hover, +.topic-list-item, +#userContent blockquote, +.tippy-box[data-theme~="vk"], +.poll, +#standaloneCommentBox, +.searchBtn, +.searchList #used, +.searchOptionName, +.borderup, +#tour, +#auth, +.ovk-photo-view, +.searchOptions { border-color: #2c2640 !important; } -.tippy-box[data-theme~="vk"][data-placement^='top'] > .tippy-arrow::before, .tippy-box[data-theme~="vk"][data-placement^='bottom'] > .tippy-arrow::before { +.tippy-box[data-theme~="vk"][data-placement^='top']>.tippy-arrow::before, +.tippy-box[data-theme~="vk"][data-placement^='bottom']>.tippy-arrow::before { border-top-color: #1e1a2b; border-bottom-color: #1e1a2b; } @@ -53,7 +150,13 @@ hr { box-shadow: unset; } -.button, #activetabs, .messagebox-content-header, .accent-box, .button_search, .searchBtn, .searchOptionName { +.button, +#activetabs, +.messagebox-content-header, +.accent-box, +.button_search, +.searchBtn, +.searchOptionName { background-color: #383052; } @@ -61,7 +164,9 @@ hr { background-color: #40375e; } -.menu_divider, .ovk-diag-action, .minilink .counter { +.menu_divider, +.ovk-diag-action, +.minilink .counter { background-color: #2c2640; } @@ -70,11 +175,14 @@ hr { border-color: #2c2640; } -.bsdn_contextMenuElement:hover, .searchList li:hover { +.bsdn_contextMenuElement:hover, +.searchList li:hover { background-color: #29223a; } -#ovkDraw .literally .lc-picker, .literally .lc-options.horz-toolbar, .mb_tab#active { +#ovkDraw .literally .lc-picker, +.literally .lc-options.horz-toolbar, +.mb_tab#active { background-color: #453e5e !important; } @@ -82,19 +190,35 @@ hr { background-color: #272e4894; } -a, .page_footer .link, #profile_link, .profile_link { +a, +.page_footer .link, +#profile_link, +.profile_link { color: #8fb9d8; } -.page_footer .link:hover, .navigation .link:hover, .navigation .edit-button:hover, #profile_link:hover, .profile_link:hover, #wallAttachmentMenu > a:hover, .crp-entry:hover, .navigation-lang .link_new:hover, .paginator a:hover, .post-share-button:hover, .post-like-button:hover, .searchBtn:active { +.page_footer .link:hover, +.navigation .link:hover, +.navigation .edit-button:hover, +#profile_link:hover, +.profile_link:hover, +#wallAttachmentMenu>a:hover, +.crp-entry:hover, +.navigation-lang .link_new:hover, +.paginator a:hover, +.post-share-button:hover, +.post-like-button:hover, +.searchBtn:active { background-color: #272138 !important; } -.header_navigation .link a, .searchOptionName { +.header_navigation .link a, +.searchOptionName { color: #bcc3d0; } -.header_navigation .link a:hover, .home_button_custom { +.header_navigation .link a:hover, +.home_button_custom { color: #c7cdd9; } @@ -107,7 +231,8 @@ a, .page_footer .link, #profile_link, .profile_link { color: #7b94c4 !important; } -#test-label, .msg.msg_err { +#test-label, +.msg.msg_err { background-color: #30161d; } @@ -115,19 +240,47 @@ a, .page_footer .link, #profile_link, .profile_link { background-color: #163f13; } -h4, .content_title_expanded, .summaryBar .summary, .content_title_unexpanded { +h4, +.content_title_expanded, +.summaryBar .summary, +.content_title_unexpanded { color: #7c94c5; } -.notes_titles small, .post-upload, .post-has-poll { +.notes_titles small, +.post-upload, +.post-has-poll { color: #6f82a8; } -.content_title_expanded, .content_title_unexpanded, .ovk-diag, .settings_delete, center[style="background: white;border: #DEDEDE solid 1px;"], .album-photo img, #faqhead, td.e, tr.e { +.content_title_expanded, +.content_title_unexpanded, +.ovk-diag, +.settings_delete, +center[style="background: white;border: #DEDEDE solid 1px;"], +.album-photo img, +#faqhead, +td.e, +tr.e { background-color: #231e33 !important; } -.content_subtitle, .postFeedWrapper, .ovk-diag-head, .container_gray, .page_status_popup, .messenger-app--input, .note_header, #faqcontent, .commentsTextFieldWrap, td.v, tr.v, #votesBalance, .expand_button, #userContent blockquote, .tippy-box[data-theme~="vk"], .searchOptions { +.content_subtitle, +.postFeedWrapper, +.ovk-diag-head, +.container_gray, +.page_status_popup, +.messenger-app--input, +.note_header, +#faqcontent, +.commentsTextFieldWrap, +td.v, +tr.v, +#votesBalance, +.expand_button, +#userContent blockquote, +.tippy-box[data-theme~="vk"], +.searchOptions { background-color: #1e1a2b !important; } @@ -137,22 +290,27 @@ h4, .content_title_expanded, .summaryBar .summary, .content_title_unexpanded { } .content_title_expanded { - background-image: url("/themepack/midnight/0.0.2.8/resource/flex_arrow_open.png") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/flex_arrow_open.png") !important; } .content_title_unexpanded { - background-image: url("/themepack/midnight/0.0.2.8/resource/flex_arrow_shut.gif") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/flex_arrow_shut.gif") !important; } -.ovk-video > .preview, .video-preview { +.ovk-video>.preview, +.video-preview { box-shadow: inset 0 0 0 1px #231e33, inset 0 0 0 2px #1e1a2b; } -#wallAttachmentMenu, .container_gray .content, .mb_tabs { +#wallAttachmentMenu, +.container_gray .content, +.mb_tabs { background-color: #120e1f; } -#wallAttachmentMenu > .header, .messenger-app--messages---message.unread, tr.h { +#wallAttachmentMenu>.header, +.messenger-app--messages---message.unread, +tr.h { background-color: #1d192b; } @@ -163,41 +321,59 @@ h4, .content_title_expanded, .summaryBar .summary, .content_title_unexpanded { .page_yellowheader { color: #c6d2e8; - background-image: url("/themepack/midnight/0.0.2.8/resource/header_purple.png") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/header_purple.png") !important; background-color: #231f34; border-color: #231f34; } .page_header { - background-image: url("/themepack/midnight/0.0.2.8/resource/header.png") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/header.png") !important; } .page_custom_header { - background-image: url("/themepack/midnight/0.0.2.8/resource/header_custom.png") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/header_custom.png") !important; } -.page_yellowheader span, .page_yellowheader a { +.page_yellowheader span, +.page_yellowheader a { color: #a48aff !important; } -.completeness-gauge, .poll-result-bar { +.completeness-gauge, +.poll-result-bar { background-color: #231e33; } -.completeness-gauge > div, .poll-result-bar-sub { +.completeness-gauge>div, +.poll-result-bar-sub { background-color: #2c2640; } -form[action="/search"] > input, .header_search_input, textarea, input[type="text"], input[type="password"], input[type~="text"], input[type~="password"], input[type="email"], input[type="phone"], input[type~="email"], input[type~="phone"], input[type="search"], input[type~="search"], input[type~="date"], select, .crp-entry--message.unread { +form[action="/search"]>input, +.header_search_input, +textarea, +input[type="text"], +input[type="password"], +input[type~="text"], +input[type~="password"], +input[type="email"], +input[type="phone"], +input[type~="email"], +input[type~="phone"], +input[type="search"], +input[type~="search"], +input[type~="date"], +select, +.crp-entry--message.unread { background-color: #181826 !important; } input[type="checkbox"] { - background-image: url("/themepack/midnight/0.0.2.8/resource/checkbox.png") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/checkbox.png") !important; } input[type="radio"] { - background-image: url("/themepack/midnight/0.0.2.8/resource/radio.png") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/radio.png") !important; } .header_navigation .link { @@ -205,19 +381,20 @@ input[type="radio"] { } .heart { - background-image: url("/themepack/midnight/0.0.2.8/resource/like.gif") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/like.gif") !important; } -.pinned-mark, .post-author .pin { - background-image: url("/themepack/midnight/0.0.2.8/resource/pin.png") !important; +.pinned-mark, +.post-author .pin { + background-image: url("/themepack/midnight/0.0.2.9/resource/pin.png") !important; } .repost-icon { - background-image: url("/themepack/midnight/0.0.2.8/resource/published.gif") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/published.gif") !important; } .post-author .delete { - background-image: url("/themepack/midnight/0.0.2.8/resource/input_clear.gif") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/input_clear.gif") !important; } .user-alert { @@ -239,7 +416,7 @@ input[type="radio"] { } #backdropEditor { - background-image: url("/themepack/midnight/0.0.2.8/resource/backdrop-editor.gif") !important; + background-image: url("/themepack/midnight/0.0.2.9/resource/backdrop-editor.gif") !important; border-color: #473e66 !important; } @@ -260,11 +437,13 @@ input[type="radio"] { background-color: rgb(30, 26, 43) !important; } -.bigPlayer .selectableTrack, .audioEmbed .track > .selectableTrack { +.bigPlayer .selectableTrack, +.audioEmbed .track>.selectableTrack { border-top: #b9b9b9 1px solid !important; } -.bigPlayer .paddingLayer .slider, .audioEmbed .track .slider { +.bigPlayer .paddingLayer .slider, +.audioEmbed .track .slider { background: #b9b9b9 !important; } @@ -323,7 +502,8 @@ input[type="radio"] { filter: invert(81%); } -img[src$='/assets/packages/static/openvk/img/camera_200.png'], img[src$='/assets/packages/static/openvk/img/song.jpg'] { +img[src$='/assets/packages/static/openvk/img/camera_200.png'], +img[src$='/assets/packages/static/openvk/img/song.jpg'] { filter: invert(100%); } @@ -339,7 +519,8 @@ img[src$='/assets/packages/static/openvk/img/camera_200.png'], img[src$='/assets color: unset !important; } -#upload_container, .whiteBox { +#upload_container, +.whiteBox { background: #1d1928 !important; border: 1px solid #383052 !important; } @@ -375,18 +556,20 @@ ul { cursor: pointer; } -.showMore, .showMoreAudiosPlaylist { +.showMore, +.showMoreAudiosPlaylist { background: #181826 !important; } /* Tour */ -.rightNav h1{ +.rightNav h1 { background: #000; } -.tabcontent{ + +.tabcontent { background: #2c2640 !important; } .add_image_text { z-index: 999; -} \ No newline at end of file +} diff --git a/themepacks/midnight/theme.yml b/themepacks/midnight/theme.yml index a9251eb0..ee5406d7 100644 --- a/themepacks/midnight/theme.yml +++ b/themepacks/midnight/theme.yml @@ -1,5 +1,5 @@ id: midnight -version: "0.0.2.8" +version: "0.0.2.9" openvk_version: 0 enabled: 1 metadata:
{_gender}: {$x->isFemale() ? tr("female") : tr("male")}{_pronouns}: {$x->isFemale() ? tr("female") : ($x->isNeutral() ? tr("neutral") : tr("male"))}
{_relationship}: