HEX
Server: Apache
System: Linux WWW 6.1.0-40-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.153-1 (2025-09-20) x86_64
User: web11 (1011)
PHP: 8.2.29
Disabled: NONE
Upload Files
File: /var/www/apklausos/application/models/Permissiontemplates.php
<?php

/**
 * This is the model class for table "{{permissiontemplates}}".
 *
 * The following are the available columns in table '{{permissiontemplates}}':
 * @property integer $ptid
 * @property string $name
 * @property string $description
 * @property string $renewed_last
 * @property string $created_at
 * @property integer $created_by
 */
class Permissiontemplates extends CActiveRecord
{
    /**
     * @return string the associated database table name
     */
    public function tableName()
    {
        return '{{permissiontemplates}}';
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('name, description, renewed_last, created_at, created_by', 'required'),
            array('created_by', 'numerical', 'integerOnly' => true),
            array('name', 'length', 'max' => 192),
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            array('ptid, name, description, renewed_last, created_at, created_by', 'safe', 'on' => 'search'),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'connectedusers' => array(self::HAS_MANY, 'UserInPermissionrole', ['ptid']),
        );
    }

    /**
     * Collects and maps the connected userids to userobjects
     *
     * @return array filled with usermodels
     */
    public function getConnectedUserobjects(): array
    {
        return array_map(
            function ($oMappingInstance) {
                return User::model()->findByPk($oMappingInstance->uid);
            },
            $this->connectedusers
        );
    }

    /**
     * Apply a user role to the user.
     *
     * A user role is defined in table prefix_permissiontemplates.
     * If user does not have the user role already, a new entry will be made in
     * table prefix_user_in_permissionrole
     *
     * @param int $iUserId
     * @param int $ptid Permissiontemplates id
     * @return boolean
     */
    public function applyToUser(int $iUserId, int $ptid = null): bool
    {
        if ($ptid == null) {
            $ptid = $this->ptid;
        }

        $oModel = UserInPermissionrole::model()->findByPk(['ptid' => $ptid, 'uid' => $iUserId]);

        if ($oModel == null) {
            $oModel = new UserInPermissionrole();
            $oModel->ptid = $ptid;
            $oModel->uid = $iUserId;
        }

        return $oModel->save();
    }

    /**
     * Clear User.
     * @param int $iUserId
     * @return boolean
     */
    public function clearUser(int $iUserId): bool
    {
        $aModels = UserInPermissionrole::model()->findAllByAttributes(['uid' => $iUserId]);

        if (safecount($aModels) == 0) {
            return true;
        }

        return array_reduce(
            $aModels,
            function ($cur, $oModel) {
                return $cur && $oModel->delete();
            },
            true
        );
    }

    /**
     * Returns Date Format.
     * @return string
     */
    public function getDateFormat(): string
    {
        $dateFormat = getDateFormatData(Yii::app()->session['dateformat']);
        return $dateFormat['phpdate'];
    }

    /**
     * Returns formatted 'created at' date.
     * @return string
     */
    public function getFormattedDateCreated(): string
    {
        $dateCreated = $this->created_at;
        $date = new DateTime($dateCreated);
        return $date->format($this->dateFormat);
    }

    /**
     * Returns formatted 'renewed_last' date.
     * @return string
     */
    public function getFormattedDateModified(): string
    {
        $dateModified = $this->renewed_last;
        $date = new DateTime($dateModified);
        return $date->format($this->dateFormat);
    }
    /**
     * Gets the buttons for the GridView
     *
     * @return string
     */
    public function getButtons(): string
    {
        $detailUrl         = Yii::app()->getController()->createUrl('userRole/viewRole', ['ptid' => $this->ptid]);
        $editUrl           = Yii::app()->getController()->createUrl('userRole/editRoleModal', ['ptid' => $this->ptid]);
        $exportRoleUrl     = Yii::app()->getController()->createUrl('userRole/runExport', ['ptid' => $this->ptid]);
        $setPermissionsUrl = Yii::app()->getController()->createUrl(
            'userRole/renderModalPermissions',
            ['ptid' => $this->ptid]
        );
        $deleteUrl         = Yii::app()->getController()->createUrl('userRole/delete');

        //currently there are no special permissions for user role (see controller actions...)
        $permissionSuperAdminRead = Permission::model()->hasGlobalPermission('superadmin', 'read');

        $dropdownItems = [];

        $dropdownItems[] = [
            'title'            => gT('Edit role'),
            'iconClass'        => 'ri-pencil-fill',
            'enabledCondition' => $permissionSuperAdminRead,
            'linkClass'        => 'RoleControl--action--openmodal RoleControl--action--edituser',
            'linkAttributes'   => [
                'data-href' => $editUrl
            ]
        ];
        $dropdownItems[] = [
            'title'            => gT('View role details'),
            'iconClass'        => 'ri-search-line',
            'enabledCondition' => $permissionSuperAdminRead,
            'linkClass'        => 'RoleControl--action--openmodal RoleControl--action--userdetail',
            'linkAttributes'   => [
                'data-href' => $detailUrl
            ]
        ];

        $dropdownItems[] = [
            'title'            => gT('Edit permission'),
            'iconClass'        => 'ri-lock-fill',
            'enabledCondition' => $permissionSuperAdminRead,
            'linkClass'        => 'RoleControl--action--openmodal RoleControl--action--permissions',
            'linkAttributes'   => [
                'data-href' => $setPermissionsUrl,
                'data-modalSize' => 'modal-lg',
            ]
        ];

        $dropdownItems[] = [
            'title'            => gT('Export role'),
            'iconClass'        => 'ri-download-fill',
            'enabledCondition' => $permissionSuperAdminRead,
            'linkClass'        => 'RoleControl--action--link',
            'url'              => $exportRoleUrl,
        ];

        $deletePostData = json_encode(['ptid' => $this->ptid]);
        $dropdownItems[] = [
            'title'            => gT('Delete user role'),
            'iconClass'        => 'ri-delete-bin-fill text-danger',
            'enabledCondition' => $permissionSuperAdminRead,
            'linkAttributes'   => [
                'data-bs-toggle' => "modal",
                'data-post-url'  => $deleteUrl,
                'data-post-datas' => $deletePostData,
                'data-message'   => sprintf(gT("Are you sure you want to delete user role '%s'?"), CHtml::encode($this->name)),
                'data-bs-target' => "#confirmation-modal",
                'data-btnclass'  => 'btn-danger',
                'data-btntext'   => gT('Delete'),
                'data-title'     => gT('Delete user role')
            ]
        ];

        return App()->getController()->widget(
            'ext.admin.grid.GridActionsWidget.GridActionsWidget',
            ['dropdownItems' => $dropdownItems],
            true
        );
    }

    /**
     * Returns Columns.s
     * @return array
     */
    public function getColumns()
    {
        // TODO should be static
        $cols = array(
            array(
                'value' => "\"<input type='checkbox' class='RoleControl--selector-roleCheckbox' name='selectedRole[]' value='\".\$data->ptid.\"' />\"",
                'type' => 'raw',
                'header' => "<input type='checkbox' id='RoleControl--action-toggleAllRoles' />",
                'filter' => false
            ),
            array(
                "name" => 'name',
                "header" => gT("Name")
            ),
            array(
                "name" => 'description',
                "header" => gT("Description"),
                "value" => '$data->description',
                "htmlOptions" => ["style" => "white-space: pre-wrap"],
                "headerHtmlOptions" => ["style" => "max-width: 35%"],
            ),
            array(
                "name" => 'renewed_last',
                "header" => gT("Modified"),
                "value" => '$data->formattedDateModified'
            ),
            array(
                "name" => "created_at",
                "header" => gT("Created"),
                "value" => '$data->formattedDateCreated',

            ),
            array(
                "name" => 'buttons',
                "type" => 'raw',
                "header" => gT("Action"),
                'filter' => false,
                'headerHtmlOptions' => ['class' => 'ls-sticky-column'],
                'htmlOptions'       => ['class' => 'text-center button-column ls-sticky-column'],
            ),
        );

        return $cols;
    }

    /**
     * @return SimpleXMLElement
     */
    public function compileExportXML()
    {
        $xml = new SimpleXMLElement('<limepermissionrole/>');

        //Meta section
        $meta = $xml->addChild('meta');
        $meta->addChild('name', '<![CDATA[' . $this->name . ']]>');
        $meta->addChild('description', '<![CDATA[' . $this->description . ']]>');
        $meta->addChild('date', date('Y-m-d H:i:s'));
        $meta->addChild('createdOn', Yii::app()->getConfig('sitename'));
        $meta->addChild('createdBy', Yii::app()->user->id);

        // Get base permissions
        $aBasePermissions = Permission::model()->getGlobalBasePermissions();

        //Permission section
        $permission = $xml->addChild('permissions');
        foreach ($aBasePermissions as $sPermissionKey => $aCRUDPermissions) {
            $curKeyRow = $permission->addChild($sPermissionKey);
            foreach ($aCRUDPermissions as $sCRUDKey => $CRUDValue) {
                $curKeyRow->addChild(
                    $sCRUDKey,
                    ($this->getHasPermission($sPermissionKey, $sCRUDKey) ? 1 : 0)
                );
            }
        }

        return $xml;
    }

    /**
     * @param SimpleXMLElement $xmlEntitiy
     * @param boolean $includeRootData
     * @return Permissiontemplates|boolean
     */
    public function createFromXML($xmlEntitiy, $includeRootData = false)
    {
        $name = $this->removeCdataFormat($xmlEntitiy->meta->name);
        $iExisiting = self::model()->countByAttributes(['name' => $name]);
        if ($iExisiting > 0) {
            return false;
        }
        $oRole = new self();
        $oRole->name = $this->removeCdataFormat($xmlEntitiy->meta->name);
        $oRole->description = $this->removeCdataFormat($xmlEntitiy->meta->description);

        if ($includeRootData) {
            $oRole->created_at = $this->removeCdataFormat($xmlEntitiy->meta->createdOn);
            $oRole->created_by = $this->removeCdataFormat($xmlEntitiy->meta->createdBy);
        } else {
            $oRole->created_by = App()->user->id;
            $oRole->created_at = date('Y-m-d H:i');
        }
        $oRole->renewed_last = date('Y-m-d H:i');

        if ($oRole->save()) {
            return $oRole;
        }

        return false;
    }

    /**
     * @param mixed $node XML node?
     * @return string
     */
    public function removeCdataFormat($node)
    {
        $nodeText = (string) $node;
        $regex_replace = array('','');
        $regex_patterns = array(
            '/<!\[CDATA\[/',
            '/\]\]>/'
        );
        return trim(preg_replace($regex_patterns, $regex_replace, $nodeText));
    }

    /**
     * Return true if this role GIVE a permission
     * Used in self::compileExportXML only
     * @param string $sPermission
     * @param string $sCRUD
     * @return boolean
     */
    public function getHasPermission($sPermission, $sCRUD)
    {
        return Permission::model()->roleHasPermission($this->ptid, $sPermission, $sCRUD);
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     *
     * Typical usecase:
     * - Initialize the model fields with values from filter form.
     * - Execute this method to get CActiveDataProvider instance which will filter
     * models according to data in model fields.
     * - Pass data provider to CGridView, CListView or any similar widget.
     *
     * @return CActiveDataProvider the data provider that can return the models
     * based on the search/filter conditions.
     */
    public function search()
    {
        $criteria = new CDbCriteria();

        $criteria->compare('ptid', $this->ptid);
        $criteria->compare('name', $this->name, true);
        $criteria->compare('description', $this->description, true);
        $criteria->compare('renewed_last', $this->renewed_last, true);
        $criteria->compare('created_at', $this->created_at, true);
        $criteria->compare('created_by', $this->created_by);

        return new CActiveDataProvider($this, array(
            'criteria'   => $criteria,
            'pagination' => array(
                'pageSize' => App()->user->getState('pageSize', App()->params['defaultPageSize']),
            )
        ));
    }

    /**
     * Returns the static model of the specified AR class.
     * Please note that you should have this exact method in all your CActiveRecord descendants!
     * @param string $className active record class name.
     * @return Permissiontemplates the static model class
     */
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }
}