/home/ivoiecob/email.hirewise-va.com/modules/Contacts/Classes/ContactListItem.php
<?php

/**
 * This code is licensed under AGPLv3 license or Afterlogic Software License
 * if commercial version of the product was purchased.
 * For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files.
 */

namespace Aurora\Modules\Contacts\Classes;

/**
 * @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0
 * @license https://afterlogic.com/products/common-licensing Afterlogic Software License
 * @copyright Copyright (c) 2023, Afterlogic Corp.
 *
 * @package Classes
 * @subpackage ContactListItem
 */
class ContactListItem
{
    /**
     * @var mixed
     */
    public $Id;

    /**
     * @var string
     */
    public $IdStr;

    /**
     *  @var int $IdUser
     */
    public $IdUser;

    /**
     * @var string
     */
    public $ETag;

    /**
     * @var bool
     */
    public $IsGroup;

    /**
     * @var bool
     */
    public $IsOrganization;


    /**
     * @var string
     */
    public $Name;

    /**
     * @var string
     */
    public $Email;

    /**
     * @var array
     */
    public $Emails;

    /**
     * @var array
     */
    public $Phones;

    /**
     * @var int
     */
    public $Frequency;

    /**
     * @var bool
     */
    public $UseFriendlyName;

    /**
     * @var bool
     */
    public $Global;

    /**
     * @var bool
     */
    public $ItsMe;

    /**
     * @var bool
     */
    public $ReadOnly;

    /**
     * @var bool
     */
    public $Auto;

    /**
     * @var bool
     */
    public $ForSharedToAll;

    /**
     * @var bool
     */
    public $SharedToAll;

    /**
     * @var int
     */
    public $LastModified;

    /**
     * @var array
     */
    public $Events;

    /**
     * @var int
     */
    public $AgeScore;

    public $DateModified;

    public function __construct()
    {
        $this->Id = null;
        $this->IdStr = null;
        $this->IdUser = null;
        $this->ETag = null;
        $this->IsGroup = false;
        $this->IsOrganization = false;
        $this->Name = '';
        $this->Email = '';
        $this->Emails = array();
        $this->Phones = array();
        $this->Frequency = 0;
        $this->UseFriendlyName = false;
        $this->Global = false;
        $this->ItsMe = false;
        $this->ReadOnly = false;
        $this->Auto = false;
        $this->ForSharedToAll = false;
        $this->SharedToAll = false;
        $this->Events = array();
        $this->AgeScore = 1;
        $this->DateModified = 0;
    }

    /**
     * @param \Sabre\VObject\Component\VCard $oVCard
     */
    public function InitBySabreCardDAVCard($oVCard)
    {
        if ($oVCard) {
            if ($oVCard->name == 'VCARD') {
                if (isset($oVCard->UID)) {
                    $this->Id = (string)$oVCard->UID;
                    $this->IdStr = $this->Id;
                }
                $this->IsGroup = false;

                if (isset($oVCard->FN)) {
                    $this->Name = (string)$oVCard->FN;
                }

                if (isset($oVCard->EMAIL)) {
                    /** @var \Sabre\VObject\Property\FlatText $oEmail */
                    $oEmail = $oVCard->EMAIL[0];
                    $this->Email = (string)$oEmail;
                    foreach ($oVCard->EMAIL as $oEmail) {
                        if ($oTypes = $oEmail['TYPE']) {
                            if ($oTypes->has('PREF')) {
                                $this->Email = (string)$oEmail;
                                break;
                            }
                        }
                    }
                }
                if (isset($oVCard->{'X-AFTERLOGIC-USE-FREQUENCY'})) {
                    $this->Frequency = (int)$oVCard->{'X-AFTERLOGIC-USE-FREQUENCY'};
                }

                $this->UseFriendlyName = true;
                if (isset($oVCard->{'X-AFTERLOGIC-USE-FRIENDLY-NAME'})) {
                    $this->UseFriendlyName = '1' === (string)$oVCard->{'X-AFTERLOGIC-USE-FRIENDLY-NAME'};
                }
            }
        }
    }

    /**
     * @param string $sRowType
     * @param array $aRow
     */
    public function InitByLdapRowWithType($sRowType, $aRow)
    {
        if ($aRow) {
            switch ($sRowType) {
                case 'contact':
                    $this->Id = $aRow['un'][0];
                    $this->IdStr = $this->Id;
                    $this->IsGroup = false;
                    $this->Name = (string) $aRow['cn'][0];
                    $this->Email = isset($aRow['mail'][0]) ? (string) $aRow['mail'][0] :
                        (isset($aRow['homeemail'][0]) ? (string) $aRow['homeemail'][0] : '');
                    $this->Frequency = 0;
                    $this->UseFriendlyName = true;
                    break;

                case 'group':
                    $this->Id = $aRow['un'][0];
                    $this->IdStr = $this->Id;
                    $this->IsGroup = true;
                    $this->Name = $aRow['cn'][0];
                    $this->Email = '';
                    $this->Frequency = 0;
                    $this->UseFriendlyName = true;
                    break;
            }
        }
    }

    /**
     * @return string
     */
    public function ToString()
    {
        return ($this->UseFriendlyName && 0 < strlen(trim($this->Name)) && !$this->IsGroup)
            ? '"' . trim($this->Name) . '" <' . trim($this->Email) . '>'
            : (($this->IsGroup) ? trim($this->Name) : trim($this->Email));
    }

    /**
     * @return string
     */
    public function __toString()
    {
        return $this->ToString();
    }
}