Overview

Namespaces

  • FlexiPeeHP
  • PHP

Classes

  • DateTime
  • FlexiPeeHP\Actions
  • FlexiPeeHP\Adresar
  • FlexiPeeHP\Banka
  • FlexiPeeHP\Cenik
  • FlexiPeeHP\Changes
  • FlexiPeeHP\Company
  • FlexiPeeHP\DodavatelskaSmlouva
  • FlexiPeeHP\EvidenceList
  • FlexiPeeHP\FakturaPrijata
  • FlexiPeeHP\FakturaVydana
  • FlexiPeeHP\FakturaVydanaPolozka
  • FlexiPeeHP\FlexiBeeRO
  • FlexiPeeHP\FlexiBeeRW
  • FlexiPeeHP\Formats
  • FlexiPeeHP\Hooks
  • FlexiPeeHP\InterniDoklad
  • FlexiPeeHP\Kontakt
  • FlexiPeeHP\Nastaveni
  • FlexiPeeHP\Pokladna
  • FlexiPeeHP\PokladniPohyb
  • FlexiPeeHP\Priloha
  • FlexiPeeHP\RadaPokladniPohyb
  • FlexiPeeHP\Relations
  • FlexiPeeHP\SkladovaKarta
  • FlexiPeeHP\SkladovyPohyb
  • FlexiPeeHP\SkladovyPohybPolozka
  • FlexiPeeHP\SkupinaFirem
  • FlexiPeeHP\Smlouva
  • FlexiPeeHP\Status
  • FlexiPeeHP\Stitek
  • FlexiPeeHP\Strom
  • FlexiPeeHP\StromCenik
  • FlexiPeeHP\UcetniObdobi
  • FlexiPeeHP\VyrobniCislo
  • FlexiPeeHP\Zavazek
  • FlexiPeeHP\Zurnal

Interfaces

  • DateTimeInterface
  • Throwable

Traits

  • FlexiPeeHP\Firma
  • FlexiPeeHP\Stitky
  • FlexiPeeHP\Sum

Exceptions

  • Exception
  • Overview
  • Namespace
  • Class
  • Tree
  1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187: 188: 189: 190: 191: 192: 193: 194: 195: 196: 197: 198: 199: 200: 201: 202: 203: 204: 205: 206: 207: 208: 209: 210: 211: 212: 213: 214: 215: 216: 217: 218: 219: 220: 221: 222: 223: 224: 225: 226: 227: 228: 229: 230: 231: 232: 233: 
<?php
/**
 * FlexiPeeHP - Objekt kontaktu.
 *
 * @author     Vítězslav Dvořák <vitex@arachne.cz>
 * @copyright  (C) 2015-2017 Spoje.Net
 */

namespace FlexiPeeHP;

/**
 * Příloha
 *
 * @link https://www.flexibee.eu/api/dokumentace/ref/attachments/
 * @link https://demo.flexibee.eu/c/demo/priloha/properties
 */
class Priloha extends FlexiBeeRW
{
    /**
     * Evidence užitá objektem.
     *
     * @var string
     */
    public $evidence = 'priloha';

    /**
     * Evidence s přílohami
     *
     * @var array
     */
    public static $relatedEvidence = [
        'prodejka' => 'doklFak', 'pohledavka' => 'doklFak', 'zavazek' => 'doklFak',
        'faktura-prijata' => 'doklFak', 'faktura-vydana' => 'doklFak',
        'interni-doklad' => 'doklInt', 'pokladni-pohyb' => 'doklInt', 'vzajemny-zapocet' => 'doklInt',
        'banka' => 'doklInt',
        'poptavka-vydana' => 'doklObch', 'poptavka-prijata' => 'doklObch', 'objednavka-prijata' => 'doklObch',
        'nabidka-vydana' => 'doklObch',
        'objednavka-vydana' => 'doklObch', 'nabidka-prijata' => 'doklObch',
        'skladovy-pohyb' => 'doklSklad',
        'cenik' => 'cenik',
        'adresar' => 'adresar', 'kontakt' => 'kontakt'
    ];

    /**
     * Attach file
     * Přilož Soubor
     *
     * @param string $filepath
     * @param array  $attachmentData
     */
    public function attachFile($filepath, $attachmentData = [])
    {
        if (file_exists($filepath)) {
            $attachmentData['nazSoub']     = basename($filepath);
            $attachmentData['contentType'] = mime_content_type($filepath);
            $attachmentData['dataSize']    = filesize($filepath);
            $attachmentData['dataHash']    = md5_file($filepath);

            switch ($attachmentData['contentType']) {
                case 'image/png':
                case 'image/gif':
                case 'image/jpeg':
                    break;
            }
            $attachmentData['content'] = base64_encode(file_get_contents($filepath));
        }
    }

    /**
     * Obtain url for Attachment Download
     *
     * @param FlexiBeeRO $object Source object
     * @return string url
     */
    public static function getDownloadUrl($object)
    {
        $urlParts  = parse_url($object->apiURL);
        $pathParts = pathinfo($urlParts['path']);
        return $urlParts['scheme'].'://'.$urlParts['host'] .( array_key_exists('port',$urlParts) ? ':'.$urlParts['port'] : '') .$pathParts['dirname'].'/'.$pathParts['filename'].'/content';
    }

    /**
     * Obtain first attachment for given object
     *
     * @param  FlexiBeeRO $object
     * @return array
     */
    public static function getFirstAttachment($object)
    {
        $attachments = self::getAttachmentsList($object);
        return count($attachments) ? current($attachments) : null;
    }

    /**
     * Gives you attachment body as return value
     * 
     * @param int   $attachmentID
     * @param array $options      Additional Connection Options
     * 
     * @return string
     */
    public static function getAttachment($attachmentID,$options = [])
    {
        $result     = null;
        $downloader = new Priloha($attachmentID,$options);
        if ($downloader->lastResponseCode == 200) {

            $downloader->doCurlRequest(self::getDownloadURL($downloader), 'GET');
            if ($downloader->lastResponseCode == 200) {
                $result = $downloader->lastCurlResponse;
            }
        }
        return $result;
    }

    /**
     * Send "download" headers first and then file itself
     *
     * @param FlexiBeeRO $object
     * @param int|string $attachmentID
     */
    public static function download($object, $format = 'pdf',
                                    $attachmentID = null)
    {
        $attachments = self::getAttachmentsList($object);

        if (isset($attachmentID) && !array_key_exists($attachmentID,
                $attachments)) {
            $object->addStatusMessage(sprintf(_('Attagment %s does no exist'),
                    $attachmentID), 'warning');
        }

        $attachmentBody = $object->doCurlRequest(self::getDownloadUrl($object),
            'GET');
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Disposition: attachment; filename='.$object->getEvidence().'_'.$object.'.'.$format);
        header('Content-Length: '.strlen($attachmentBody));
        echo $attachmentBody;
    }

    /**
     * Save attachment to file
     *
     * @param int $attachmentID
     * @param string $destination directory or filename with path
     * @return int
     */
    public static function saveToFile($attachmentID, $destination)
    {
        $result     = 0;
        $downloader = new Priloha($attachmentID);
        if ($downloader->lastResponseCode == 200) {

            $downloader->doCurlRequest(self::getDownloadURL($downloader), 'GET');
            if ($downloader->lastResponseCode == 200) {
                if (is_dir($destination)) {
                    $destination .= '/'.$downloader->getDataValue('nazSoub');
                }
                $result = file_put_contents($destination,
                    $downloader->lastCurlResponse);
            }
        }
        return $result;
    }

    /**
     * Add Attachment from File
     *
     * @param FlexiBeeRW $object
     * @param string     $filename
     *
     * @return int      HTTP response code
     */
    public static function addAttachmentFromFile($object, $filename)
    {
        return self::addAttachment($object, basename($filename),
                file_get_contents($filename), mime_content_type($filename));
    }

    /**
     * Add Attachment related to current $object content
     *
     * @param FlexiBeeRW $object
     * @param string $filename
     * @param string $attachment Body
     * @param string $contentType Attachment Content-Type
     *
     * @return int HTTP Response code
     */
    public static function addAttachment($object, $filename, $attachment,
                                         $contentType)
    {
        $headersBackup                              = $object->defaultHttpHeaders;
        $object->postFields                         = $attachment;
        $object->defaultHttpHeaders['Content-Type'] = $contentType;
        $url                                        = $object->getFlexiBeeURL().'/prilohy/new/'.$filename;
        $response                                   = $object->doCurlRequest($url,
            'PUT');
        $object->defaultHttpHeaders                 = $headersBackup;
        return $response;
    }

    /**
     * Obtain Record related attachments list
     *
     * @param FlexiBeeRO $object
     * 
     * @return array
     */
    public static function getAttachmentsList($object)
    {
        $fburl       = $object->getFlexiBeeURL();
        $attachments = [];
        $oFormat = $object->format;
        $object->setFormat('json');
        $atch        = $object->getFlexiData($fburl.'/prilohy'.(count($object->defaultUrlParams)
                ? '?'.http_build_query($object->defaultUrlParams) : ''));
        $object->setFormat($oFormat);
        if (count($atch) && ($object->lastResponseCode == 200)) {
            foreach ($atch as $attachmentID => $attachmentData) {
                $attachments[$attachmentID]        = $attachmentData;
                $attachments[$attachmentID]['url'] = $object->url.'/c/'.$object->company.'/priloha/'.$attachmentData['id'];
            }
        }
        return $attachments;
    }
}
FlexiPeeHP API documentation generated by ApiGen