=== Talkzyo ===
Contributors: youzify
Tags: chat, messaging, private messages, buddypress, community
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPL-2.0+
License URI: http://www.gnu.org/licenses/gpl-2.0.txt

Private messaging for WordPress communities, with optional hosted realtime delivery.

== Description ==

Talkzyo gives your members real conversations: one-to-one chats, group
conversations with admins and moderators, attachments, replies, forwarding,
starred messages, read receipts and presence — in a floating chat bubble on any
page and a full messages centre wherever you place it.

It works on its own, and goes further when BuddyPress is present.

= Works without BuddyPress =

Drop `[talkzyo_messages]` on a page and members get the full inbox. Contacts fall
back to your site's members when no community plugin provides a friends list, and
everything is filterable so a membership plugin can narrow it.

= Deeper with BuddyPress =

* A Chat tab on member profiles
* Friends as the contact list
* Two-way sync with BuddyPress Groups — creating a group creates a conversation,
  joining adds a participant, promoting mirrors admin and moderator roles

= Delivery =

Messages arrive by polling out of the box, which needs nothing but WordPress. A
licensed site can switch to the hosted realtime service for instant delivery and
presence; the socket carries only a signal that something changed, so message
content never leaves your own server.

== Installation ==

1. Upload the plugin to `/wp-content/plugins/talkzyo` and activate it.
2. Visit **Talkzyo → General Settings** to set the theme colour, delivery method
   and list sizes.
3. Optional: add `[talkzyo_messages]` to a page for a full-width inbox.

== Frequently Asked Questions ==

= Does it require BuddyPress? =

No. BuddyPress adds profile tabs, friends and group sync, but Talkzyo runs
standalone using your site's members.

= Where are messages stored? =

In your own database, in custom tables. If you enable hosted realtime delivery,
the service is told only that a conversation has a new message id — never the
message itself.

= Do I need a Giphy account? =

Only for the GIF picker. Add your own key under **Talkzyo → Attachments**; the
picker stays hidden until you do.

== Uninstalling ==

Deleting the plugin does not delete your conversations. The messages,
participants, attachments and settings stay in the database, so removing and
reinstalling - or deactivating while you try something else - costs you nothing.

If you want the data gone, remove it deliberately: drop the tables whose names
begin with your table prefix followed by `talkzyo_`, and delete the options
beginning `talkzyo_`. There is no button for this, on purpose - a single click
that destroys every private message on a site is not something to put next to
Deactivate.

== External services ==

Talkzyo contacts two kinds of outside service, both only as a result of
something a member does. Nothing is sent on activation, on a schedule, or in
the background.

**Giphy** — used only when a member opens the GIF picker and searches. What is
sent: the search term, and the request itself (so Giphy sees your server's IP
address). No message content, no member details and no site data are sent. A
key is included so the picker works without configuration; a site can enter its
own under Talkzyo > Attachments, or switch GIFs off entirely under the same tab.
Giphy terms: https://support.giphy.com/hc/en-us/articles/360020027752-GIPHY-User-Terms-of-Service
Giphy privacy: https://support.giphy.com/hc/en-us/articles/360032872931-GIPHY-Privacy-Policy

**Link previews** — when a member posts a link in a conversation, your server
requests that page once to read its title, description and preview image. The
site contacted is whichever one the member linked to, so it is not a fixed
third party. What is sent is the request itself. Nothing about the member or
the conversation is included.

**Vimeo** — when a member posts a Vimeo link, your server asks Vimeo's public
video API once for that video's thumbnail, so the preview can show it. What is
sent: the video id from the link the member posted, and the request itself.
Nothing about the member, the conversation or the site is included. This
happens only for vimeo.com links.
Vimeo terms: https://vimeo.com/terms
Vimeo privacy: https://vimeo.com/privacy

No webfont is fetched from a third party. Both bundled families, including the
Arabic one used on right-to-left sites, are served from this plugin — earlier
versions requested the Arabic font from Google Fonts on every right-to-left
page load, and no longer do.

The plugin does not phone home. It contacts no service belonging to us, sends
no usage data and checks no licence. The optional Talkzyo Pro add-on is a
separate plugin with its own disclosure.

== Credits ==

Talkzyo bundles the following, all under GPL-compatible licences:

* EmojiOneArea 3.4.1 — MIT
* EmojiOne (2017 build), JavaScript only — MIT. Pinned deliberately. The
  project became JoyPixels and its later releases are not under a
  GPL-compatible licence, so this is the last version that can be shipped
  here. The emoji artwork is not bundled at all for the same reason: EmojiOne
  licenses its images separately. Emoji render as characters in the reader's
  own font, so nothing is fetched from anywhere.
* Moment.js — MIT. Not bundled: this uses the copy WordPress ships.
* PhotoSwipe 4.1.3 — MIT. The 4.x line, not 5.x: version 5 is a rewrite with
  a different API, and the gallery here is a small part of the plugin that
  works correctly on 4.x.
* LinkPreview helper classes — MIT / GPL dual
* Noto Sans Arabic — SIL Open Font License 1.1. Bundled rather than fetched
  from Google Fonts, so a right-to-left site makes no third-party request.
  Licence text at assets/fonts/LICENSE-noto-sans-arabic.txt.
* Open Sans — SIL Open Font License 1.1, also served from this plugin.

== Changelog ==

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 1.0.0 =
First public release.
