PractiPrint — iPrint API 2.6 за iOS
=================================

ИНСТАЛИРАНЕ
1. Качете iprint(v2.6).zip и install.php в корена на HTTPS сайта.
2. Отворете https://ВАШИЯТ-ДОМЕЙН/install.php.
3. Натиснете „Инсталирай iPrint 2.6“.
4. При успех файловете са в /iprint/. Инсталаторът проверява реален запис
   в /iprint/iprint_jobs/ и опитва да изтрие ZIP архива и себе си.
   Ако изтриването не е позволено, показва кои файлове да изтриете ръчно.

Инсталаторът проверява точния ZIP с SHA-256. Използвайте ZIP и install.php
от една и съща доставка. Не преименувайте и не променяйте ZIP архива.
Кодът изисква PHP 7.2+ и ZipArchive за инсталирането. Коренът на сайта
трябва да позволява запис от PHP. След това запис е нужен в iprint_jobs.
Вместо инсталатора можете да разархивирате папката iprint в корена ръчно.

ОБНОВЯВАНЕ
При съществуваща /iprint/ се заменят само файловете от този пакет.
Съществуващите изображения и другите файлове се запазват. При грешка
инсталаторът опитва да възстанови заменените файлове от временно копие.
Запазете предварително свои промени по API файловете, включително проверки
за вход в iprint_upload.php: пакетът ги заменя. Маркерът .installed-v2.6
предотвратява повторно стартиране на същия инсталатор. За изрично повторно
инсталиране първо архивирайте своите промени и премахнете този маркер.

ВКЛЮЧВАНЕ В СТРАНИЦА
За 58 mm:
<?php require $_SERVER['DOCUMENT_ROOT'] . '/iprint/api_iprint.php'; ?>

За 80 mm:
<?php require $_SERVER['DOCUMENT_ROOT'] . '/iprint/api_iprint_80.php'; ?>

За A4:
<?php require $_SERVER['DOCUMENT_ROOT'] . '/iprint/api_iprint_a4.php'; ?>

Документът трябва да е в точно един елемент:
<div class="receipt-wrap">Съдържание за печат</div>

Изберете API според страницата. Запазени са оригиналните размери, позиции
на бутоните и настройките за заснемане. Бутоните за 80 mm и A4 са на една
и съща позиция; ако включвате и двата в една страница, задайте различни
позиции чрез CSS. Файлът html2canvas.min.js е запазен от подадения пакет.
Изображения от чужди сайтове изискват разрешен CORS от съответния сървър.

НОВИЯТ DEEP LINK
practiprint://print?url=<URL-encoded HTTPS image URL>&format=receipt|80|a4

URL адресът е на текущия сайт, например:
https://example.com/iprint/iprint_image.php?job=0123456789abcdef0123456789abcdef

Целият HTTPS адрес се кодира с encodeURIComponent при добавяне в url.
„receipt“ е 58 mm; новият iOS файл приема и „58“.
58 и 80 mm запазват return_url към /iprint/iprint_done.php на текущия сайт.
A4 запазва досегашното поведение без return_url. Ако е нужен, добавете
&return_url= + encodeURIComponent(пълен HTTPS адрес).

Изисква се новият ContentView.swift за PractiPrint 2.6.
Старото iOS приложение, което приема само job и избран домейн, не е
съвместимо с новите линкове. Този пакет не променя Android приложението.

КАЧВАНЕ И ПОЛУЧАВАНЕ
POST /iprint/iprint_upload.php с поле image = data:image/png;base64,...
Отговор: ok, job, image_path, expires_in (900), version (2.6).
GET /iprint/iprint_image.php?job=... връща PNG.
HEAD на същия адрес проверява наличността без второ сваляне на изображението.
Изображението се получава без браузърната сесия, чрез случайния job ID.
В качващия файл е запазено място за проверка на вход/права на вашия сайт;
по подразбиране качването не изисква вход.

ВРЕМЕННИ ИЗОБРАЖЕНИЯ
Съхраняват се само на съответния сайт в /iprint/iprint_jobs/.
TTL е 900 секунди (15 минути). Изтеклите изображения се почистват при
качване или заявка към iprint_image.php. При липса на заявки физическото
изтриване чака следващата заявка или изпълнението на cron.

За почистване и когато няма посещения добавете cron, например на 5 минути:
*/5 * * * * /usr/bin/php /ПЪЛЕН/ПЪТ/ДО/САЙТА/iprint/iprint_cleanup.php

Използвайте действителния PHP път от хостинг панела. Инсталаторът не
създава cron автоматично. iprint_cleanup.php работи само от команден ред.
Изображенията не се изтриват веднага след сваляне — позволен е повторен опит
за печат в рамките на TTL. Вече свалената задача остава в приложението
според неговата логика, независимо от изтичането на сървърното копие.

В iprint_jobs има .htaccess, който блокира директния HTTP достъп за
Apache/LiteSpeed при разрешен AllowOverride. При nginx добавете еквивалентно
правило в конфигурацията: location ^~ /iprint/iprint_jobs/ { deny all; }
Изображенията трябва да се получават през iprint_image.php за прилагане на TTL.

Максималният PNG размер е запазен: 80 MiB. PHP post_max_size и memory_limit
може да ограничават качването по-рано, особено при дълги A4 документи.
Няма централен PractiPrint сървър за изображения.

ПРЕДИ ПУСКАНЕ
Компилирайте iOS 2.6 в Xcode и тествайте с реален принтер от външен HTTPS
домейн: 58 mm, 80 mm, A4, запаметен принтер, изключен принтер и повторно
пускане на приложението. Проверките на PHP/JS пакета не заменят BLE теста.
