<?php

/**
 * @file
 * TeamSpeak 3 PHP Framework
 *
 * $Id: Convert.php 10/11/2013 11:35:21 scp@orilla $
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package   TeamSpeak3
 * @version   1.1.23
 * @author    Sven 'ScP' Paulsen
 * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
 */

namespace TeamSpeak3\Helper;

use TeamSpeak3\TeamSpeak3;

/**
 * @class Convert
 * @brief Helper class for data conversion.
 */
class Convert
{
    /**
     * Converts bytes to a human readable value.
     *
     * @param  integer $bytes
     * @return string
     */
    public static function bytes($bytes)
    {
        $kbytes = sprintf("%.02f", $bytes / 1024);
        $mbytes = sprintf("%.02f", $kbytes / 1024);
        $gbytes = sprintf("%.02f", $mbytes / 1024);
        $tbytes = sprintf("%.02f", $gbytes / 1024);

        if ($tbytes >= 1) {
            return $tbytes . " TB";
        }
        if ($gbytes >= 1) {
            return $gbytes . " GB";
        }
        if ($mbytes >= 1) {
            return $mbytes . " MB";
        }
        if ($kbytes >= 1) {
            return $kbytes . " KB";
        }

        return $bytes . " B";
    }

    /**
     * Converts seconds/milliseconds to a human readable value.
     *
     * @param  integer $seconds
     * @param  boolean $is_ms
     * @param  string $format
     * @return string
     */
    public static function seconds($seconds, $is_ms = false, $format = "%dD %02d:%02d:%02d")
    {
        if ($is_ms) {
            $seconds = $seconds / 1000;
        }

        return sprintf(
            $format,
            $seconds / 60 / 60 / 24,
            ($seconds / 60 / 60) % 24,
            ($seconds / 60) % 60,
            $seconds % 60
        );
    }

    /**
     * Converts a given codec ID to a human readable name.
     *
     * @param  integer $codec
     * @return string
     */
    public static function codec($codec)
    {
        if ($codec == TeamSpeak3::CODEC_SPEEX_NARROWBAND) {
            return "Speex Narrowband";
        }
        if ($codec == TeamSpeak3::CODEC_SPEEX_WIDEBAND) {
            return "Speex Wideband";
        }
        if ($codec == TeamSpeak3::CODEC_SPEEX_ULTRAWIDEBAND) {
            return "Speex Ultra-Wideband";
        }
        if ($codec == TeamSpeak3::CODEC_CELT_MONO) {
            return "CELT Mono";
        }
        if ($codec == TeamSpeak3::CODEC_OPUS_VOICE) {
            return "Opus Voice";
        }
        if ($codec == TeamSpeak3::CODEC_OPUS_MUSIC) {
            return "Opus Music";
        }

        return "Unknown";
    }

    /**
     * Converts a given group type ID to a human readable name.
     *
     * @param  integer $type
     * @return string
     */
    public static function groupType($type)
    {
        if ($type == TeamSpeak3::GROUP_DBTYPE_TEMPLATE) {
            return "Template";
        }
        if ($type == TeamSpeak3::GROUP_DBTYPE_REGULAR) {
            return "Regular";
        }
        if ($type == TeamSpeak3::GROUP_DBTYPE_SERVERQUERY) {
            return "ServerQuery";
        }

        return "Unknown";
    }

    /**
     * Converts a given permission type ID to a human readable name.
     *
     * @param  integer $type
     * @return string
     */
    public static function permissionType($type)
    {
        if ($type == TeamSpeak3::PERM_TYPE_SERVERGROUP) {
            return "Server Group";
        }
        if ($type == TeamSpeak3::PERM_TYPE_CLIENT) {
            return "Client";
        }
        if ($type == TeamSpeak3::PERM_TYPE_CHANNEL) {
            return "Channel";
        }
        if ($type == TeamSpeak3::PERM_TYPE_CHANNELGROUP) {
            return "Channel Group";
        }
        if ($type == TeamSpeak3::PERM_TYPE_CHANNELCLIENT) {
            return "Channel Client";
        }

        return "Unknown";
    }

    /**
     * Converts a given permission category value to a human readable name.
     *
     * @param  integer $pcat
     * @return string
     */
    public static function permissionCategory($pcat)
    {
        if ($pcat == TeamSpeak3::PERM_CAT_GLOBAL) {
            return "Global";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GLOBAL_INFORMATION) {
            return "Global / Information";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GLOBAL_SERVER_MGMT) {
            return "Global / Virtual Server Management";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GLOBAL_ADM_ACTIONS) {
            return "Global / Administration";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GLOBAL_SETTINGS) {
            return "Global / Settings";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_SERVER) {
            return "Virtual Server";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_SERVER_INFORMATION) {
            return "Virtual Server / Information";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_SERVER_ADM_ACTIONS) {
            return "Virtual Server / Administration";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_SERVER_SETTINGS) {
            return "Virtual Server / Settings";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CHANNEL) {
            return "Channel";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CHANNEL_INFORMATION) {
            return "Channel / Information";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CHANNEL_CREATE) {
            return "Channel / Create";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CHANNEL_MODIFY) {
            return "Channel / Modify";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CHANNEL_DELETE) {
            return "Channel / Delete";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CHANNEL_ACCESS) {
            return "Channel / Access";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GROUP) {
            return "Group";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GROUP_INFORMATION) {
            return "Group / Information";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GROUP_CREATE) {
            return "Group / Create";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GROUP_MODIFY) {
            return "Group / Modify";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_GROUP_DELETE) {
            return "Group / Delete";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CLIENT) {
            return "Client";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CLIENT_INFORMATION) {
            return "Client / Information";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CLIENT_ADM_ACTIONS) {
            return "Client / Admin";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CLIENT_BASICS) {
            return "Client / Basics";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_CLIENT_MODIFY) {
            return "Client / Modify";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_FILETRANSFER) {
            return "File Transfer";
        }
        if ($pcat == TeamSpeak3::PERM_CAT_NEEDED_MODIFY_POWER) {
            return "Grant";
        }

        return "Unknown";
    }

    /**
     * Converts a given log level ID to a human readable name and vice versa.
     *
     * @param  mixed $level
     * @return string
     */
    public static function logLevel($level)
    {
        if (is_numeric($level)) {
            if ($level == TeamSpeak3::LOGLEVEL_CRITICAL) {
                return "CRITICAL";
            }
            if ($level == TeamSpeak3::LOGLEVEL_ERROR) {
                return "ERROR";
            }
            if ($level == TeamSpeak3::LOGLEVEL_DEBUG) {
                return "DEBUG";
            }
            if ($level == TeamSpeak3::LOGLEVEL_WARNING) {
                return "WARNING";
            }
            if ($level == TeamSpeak3::LOGLEVEL_INFO) {
                return "INFO";
            }

            return "DEVELOP";
        } else {
            if (strtoupper($level) == "CRITICAL") {
                return TeamSpeak3::LOGLEVEL_CRITICAL;
            }
            if (strtoupper($level) == "ERROR") {
                return TeamSpeak3::LOGLEVEL_ERROR;
            }
            if (strtoupper($level) == "DEBUG") {
                return TeamSpeak3::LOGLEVEL_DEBUG;
            }
            if (strtoupper($level) == "WARNING") {
                return TeamSpeak3::LOGLEVEL_WARNING;
            }
            if (strtoupper($level) == "INFO") {
                return TeamSpeak3::LOGLEVEL_INFO;
            }

            return TeamSpeak3::LOGLEVEL_DEVEL;
        }
    }

    /**
     * Converts a specified log entry string into an array containing the data.
     *
     * @param  string $entry
     * @return array
     */
    public static function logEntry($entry)
    {
        $parts = explode("|", $entry, 5);
        $array = array();

        if (count($parts) != 5) {
            $array["timestamp"] = 0;
            $array["level"] = TeamSpeak3::LOGLEVEL_ERROR;
            $array["channel"] = "ParamParser";
            $array["server_id"] = "";
            $array["msg"] = StringHelper::factory("convert error (" . trim($entry) . ")");
            $array["msg_plain"] = $entry;
            $array["malformed"] = true;
        } else {
            $array["timestamp"] = strtotime(trim($parts[0]));
            $array["level"] = self::logLevel(trim($parts[1]));
            $array["channel"] = trim($parts[2]);
            $array["server_id"] = trim($parts[3]);
            $array["msg"] = StringHelper::factory(trim($parts[4]));
            $array["msg_plain"] = $entry;
            $array["malformed"] = false;
        }

        return $array;
    }

    /**
     * Converts a given string to a ServerQuery password hash.
     *
     * @param  string $plain
     * @return string
     */
    public static function password($plain)
    {
        return base64_encode(sha1($plain, true));
    }

    /**
     * Returns a client-like formatted version of the TeamSpeak 3 version string.
     *
     * @param  string $version
     * @param  string $format
     * @return string
     */
    public static function version($version, $format = "Y-m-d h:i:s")
    {
        if (!$version instanceof StringHelper) {
            $version = new StringHelper($version);
        }

        $buildno = $version->section("[", 1)->filterDigits()->toInt();

        return ($buildno <= 15001) ? $version : $version->section("[")->append("(" . date($format, $buildno) . ")");
    }

    /**
     * Returns a client-like short-formatted version of the TeamSpeak 3 version string.
     *
     * @param  string $version
     * @return string
     */
    public static function versionShort($version)
    {
        if (!$version instanceof StringHelper) {
            $version = new StringHelper($version);
        }

        return $version->section(" ", 0);
    }

    /**
     * Tries to detect the type of an image by a given string and returns it.
     *
     * @param  string $binary
     * @return string
     */
    public static function imageMimeType($binary)
    {
        if (!preg_match(
            '/\A(?:(\xff\xd8\xff)|(GIF8[79]a)|(\x89PNG\x0d\x0a)|(BM)|(\x49\x49(\x2a\x00|\x00\x4a))|(FORM.{4}ILBM))/',
            $binary,
            $matches
        )
        ) {
            return "application/octet-stream";
        }

        $type = array(
            1 => "image/jpeg",
            2 => "image/gif",
            3 => "image/png",
            4 => "image/x-windows-bmp",
            5 => "image/tiff",
            6 => "image/x-ilbm",
        );

        return $type[count($matches) - 1];
    }
}


<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\adminUi\widget;

use Yii;
use yii\adminUi\assetsBundle\AdminUiAsset as AdminUiAsset;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;

/**
 * NavBar renders a navbar HTML component.
 *
 * Any content enclosed between the [[begin()]] and [[end()]] calls of NavBar
 * is treated as the content of the navbar. You may use widgets such as [[Nav]]
 * or [[\yii\widgets\Menu]] to build up such content. For example,
 *
 * ```php
 * use yii\bootstrap\NavBar;
 * use yii\widgets\Menu;
 *
 * NavBar::begin(['brandLabel' => 'NavBar Test']);
 * echo Nav::widget([
 *     'items' => [
 *         ['label' => 'Home', 'url' => ['/site/index']],
 *         ['label' => 'About', 'url' => ['/site/about']],
 *     ],
 * ]);
 * NavBar::end();
 * ```
 *
 * @see http://getbootstrap.com/components/#navbar
 * @author Antonio Ramirez <amigo.cobos@gmail.com>
 * @author Alexander Kochetov <creocoder@gmail.com>
 * @since 2.0
 */
class NavBarUser extends Widget
{
    public $type = 'topbar';
    /**
     * Renders the widget.
     */
    public function run(){
        if (Yii::$app->user->isGuest) {
            echo $this->render('navbaruser_logout');
        }else{
            echo $this->render('navbaruser_login',array('type'=>$this->type));
        }
        AdminUiAsset::register($this->getView());
    }

    /**
     * Renders collapsible toggle button.
     * @return string the rendering toggle button.
     */
    protected function getData(){
    }
}


<?php

/**
 * @file
 * TeamSpeak 3 PHP Framework
 *
 * $Id: Crypt.php 10/11/2013 11:35:21 scp@orilla $
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package   TeamSpeak3
 * @version   1.1.23
 * @author    Sven 'ScP' Paulsen
 * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
 */

namespace TeamSpeak3\Helper;

use TeamSpeak3\Ts3Exception;

/**
 * @class Crypt
 * @brief Helper class for data encryption.
 */
class Crypt
{
    /**
     * Stores the secret passphrase to encrypt or decrypt a given string.
     *
     * @var string
     */
    protected $passphrase = null;

    /**
     * Stores an array containing 18 32-bit entries.
     *
     * @var array
     */
    protected $p = array();

    /**
     * Stores an array containing 4 sub-arrays with 256 32-bit entries.
     *
     * @var array
     */
    protected $s = array();

    /**
     * The Crypt constructor.
     *
     * @param  string $secret
     * @return Crypt
     */
    public function __construct($secret)
    {
        $this->setDefaultKeys();
        $this->setSecretKey($secret);
    }

    /**
     * Encrypts a given string.
     *
     * @param string $string
     * @return string
     */
    public function encrypt($string)
    {
        $string = trim($string);
        $encryp = "";
        $length = strlen($string);
        $string .= str_repeat(chr(0), (8 - ($length % 8)) % 8);

        for ($i = 0; $i < $length; $i += 8) {
            list(, $xl, $xr) = unpack("N2", substr($string, $i, 8));
            $this->encipher($xl, $xr);
            $encryp .= pack("N2", $xl, $xr);
        }

        return base64_encode($encryp);
    }

    /**
     * Decrypts a given string.
     *
     * @param string $string
     * @return string
     */
    public function decrypt($string)
    {
        $string = base64_decode($string);
        $decryp = "";
        $length = strlen($string);
        $string .= str_repeat(chr(0), (8 - ($length % 8)) % 8);

        for ($i = 0; $i < $length; $i += 8) {
            list(, $xl, $xr) = unpack("N2", substr($string, $i, 8));
            $this->decipher($xl, $xr);
            $decryp .= pack("N2", $xl, $xr);
        }

        return trim($decryp);
    }

    /**
     * Enciphers a single 64-bit block.
     *
     * @param integer $xl
     * @param integer $xr
     */
    protected function encipher(&$xl, &$xr)
    {
        for ($i = 0; $i < 16; $i++) {
            $temp = $xl ^ $this->p[$i];
            $xl = ((($this->s[0][($temp >> 24) & 255] + $this->s[1][($temp >> 16) & 255]) ^ $this->s[2][($temp >> 8) & 255]) + $this->s[3][$temp & 255]) ^ $xr;
            $xr = $temp;
        }

        $xr = $xl ^ $this->p[16];
        $xl = $temp ^ $this->p[17];
    }

    /**
     * Deciphers a single 64-bit block
     *
     * @param  integer $xl
     * @param  integer $xr
     * @return void
     */
    protected function decipher(&$xl, &$xr)
    {
        for ($i = 17; $i > 1; $i--) {
            $temp = $xl ^ $this->p[$i];
            $xl = ((($this->s[0][($temp >> 24) & 255] + $this->s[1][($temp >> 16) & 255]) ^ $this->s[2][($temp >> 8) & 255]) + $this->s[3][$temp & 255]) ^ $xr;
            $xr = $temp;
        }

        $xr = $xl ^ $this->p[1];
        $xl = $temp ^ $this->p[0];
    }

    /**
     * Sets the secret key using the specified pasphrase.
     *
     * @param  string $passphrase
     * @throws \Teamspeak3\Ts3Exception
     * @return void
     */
    protected function setSecretKey($passphrase)
    {
        $length = strlen($passphrase);

        if (strlen($passphrase) < 1 || strlen($passphrase) > 56) {
            throw new Ts3Exception(
                "secret passphrase must contain at least one but less than 56 characters"
            );
        }

        $k = 0;
        $data = 0;
        $datal = 0;
        $datar = 0;

        for ($i = 0; $i < 18; $i++) {
            $data = 0;
            for ($j = 4; $j > 0; $j--) {
                $data = $data << 8 | ord($passphrase{$k});
                $k = ($k + 1) % $length;
            }
            $this->p[$i] ^= $data;
        }

        for ($i = 0; $i <= 16; $i += 2) {
            $this->encipher($datal, $datar);
            $this->p[$i] = $datal;
            $this->p[$i + 1] = $datar;
        }

        foreach ($this->s as $key => $val) {
            for ($i = 0; $i < 256; $i += 2) {
                $this->encipher($datal, $datar);
                $this->s[$key][$i] = $datal;
                $this->s[$key][$i + 1] = $datar;
            }
        }
    }

    /**
     * Sets the defult p and s keys.
     *
     * @return void
     */
    protected function setDefaultKeys()
    {
        $this->p = array(
            0x243F6A88,
            0x85A308D3,
            0x13198A2E,
            0x03707344,
            0xA4093822,
            0x299F31D0,
            0x082EFA98,
            0xEC4E6C89,
            0x452821E6,
            0x38D01377,
            0xBE5466CF,
            0x34E90C6C,
            0xC0AC29B7,
            0xC97C50DD,
            0x3F84D5B5,
            0xB5470917,
            0x9216D5D9,
            0x8979FB1B,
        );
        $this->s = array(
            array(
                0xD1310BA6,
                0x98DFB5AC,
                0x2FFD72DB,
                0xD01ADFB7,
                0xB8E1AFED,
                0x6A267E96,
                0xBA7C9045,
                0xF12C7F99,
                0x24A19947,
                0xB3916CF7,
                0x0801F2E2,
                0x858EFC16,
                0x636920D8,
                0x71574E69,
                0xA458FEA3,
                0xF4933D7E,
                0x0D95748F,
                0x728EB658,
                0x718BCD58,
                0x82154AEE,
                0x7B54A41D,
                0xC25A59B5,
                0x9C30D539,
                0x2AF26013,
                0xC5D1B023,
                0x286085F0,
                0xCA417918,
                0xB8DB38EF,
                0x8E79DCB0,
                0x603A180E,
                0x6C9E0E8B,
                0xB01E8A3E,
                0xD71577C1,
                0xBD314B27,
                0x78AF2FDA,
                0x55605C60,
                0xE65525F3,
                0xAA55AB94,
                0x57489862,
                0x63E81440,
                0x55CA396A,
                0x2AAB10B6,
                0xB4CC5C34,
                0x1141E8CE,
                0xA15486AF,
                0x7C72E993,
                0xB3EE1411,
                0x636FBC2A,
                0x2BA9C55D,
                0x741831F6,
                0xCE5C3E16,
                0x9B87931E,
                0xAFD6BA33,
                0x6C24CF5C,
                0x7A325381,
                0x28958677,
                0x3B8F4898,
                0x6B4BB9AF,
                0xC4BFE81B,
                0x66282193,
                0x61D809CC,
                0xFB21A991,
                0x487CAC60,
                0x5DEC8032,
                0xEF845D5D,
                0xE98575B1,
                0xDC262302,
                0xEB651B88,
                0x23893E81,
                0xD396ACC5,
                0x0F6D6FF3,
                0x83F44239,
                0x2E0B4482,
                0xA4842004,
                0x69C8F04A,
                0x9E1F9B5E,
                0x21C66842,
                0xF6E96C9A,
                0x670C9C61,
                0xABD388F0,
                0x6A51A0D2,
                0xD8542F68,
                0x960FA728,
                0xAB5133A3,
                0x6EEF0B6C,
                0x137A3BE4,
                0xBA3BF050,
                0x7EFB2A98,
                0xA1F1651D,
                0x39AF0176,
                0x66CA593E,
                0x82430E88,
                0x8CEE8619,
                0x456F9FB4,
                0x7D84A5C3,
                0x3B8B5EBE,
                0xE06F75D8,
                0x85C12073,
                0x401A449F,
                0x56C16AA6,
                0x4ED3AA62,
                0x363F7706,
                0x1BFEDF72,
                0x429B023D,
                0x37D0D724,
                0xD00A1248,
                0xDB0FEAD3,
                0x49F1C09B,
                0x075372C9,
                0x80991B7B,
                0x25D479D8,
                0xF6E8DEF7,
                0xE3FE501A,
                0xB6794C3B,
                0x976CE0BD,
                0x04C006BA,
                0xC1A94FB6,
                0x409F60C4,
                0x5E5C9EC2,
                0x196A2463,
                0x68FB6FAF,
                0x3E6C53B5,
                0x1339B2EB,
                0x3B52EC6F,
                0x6DFC511F,
                0x9B30952C,
                0xCC814544,
                0xAF5EBD09,
                0xBEE3D004,
                0xDE334AFD,
                0x660F2807,
                0x192E4BB3,
                0xC0CBA857,
                0x45C8740F,
                0xD20B5F39,
                0xB9D3FBDB,
                0x5579C0BD,
                0x1A60320A,
                0xD6A100C6,
                0x402C7279,
                0x679F25FE,
                0xFB1FA3CC,
                0x8EA5E9F8,
                0xDB3222F8,
                0x3C7516DF,
                0xFD616B15,
                0x2F501EC8,
                0xAD0552AB,
                0x323DB5FA,
                0xFD238760,
                0x53317B48,
                0x3E00DF82,
                0x9E5C57BB,
                0xCA6F8CA0,
                0x1A87562E,
                0xDF1769DB,
                0xD542A8F6,
                0x287EFFC3,
                0xAC6732C6,
                0x8C4F5573,
                0x695B27B0,
                0xBBCA58C8,
                0xE1FFA35D,
                0xB8F011A0,
                0x10FA3D98,
                0xFD2183B8,
                0x4AFCB56C,
                0x2DD1D35B,
                0x9A53E479,
                0xB6F84565,
                0xD28E49BC,
                0x4BFB9790,
                0xE1DDF2DA,
                0xA4CB7E33,
                0x62FB1341,
                0xCEE4C6E8,
                0xEF20CADA,
                0x36774C01,
                0xD07E9EFE,
                0x2BF11FB4,
                0x95DBDA4D,
                0xAE909198,
                0xEAAD8E71,
                0x6B93D5A0,
                0xD08ED1D0,
                0xAFC725E0,
                0x8E3C5B2F,
                0x8E7594B7,
                0x8FF6E2FB,
                0xF2122B64,
                0x8888B812,
                0x900DF01C,
                0x4FAD5EA0,
                0x688FC31C,
                0xD1CFF191,
                0xB3A8C1AD,
                0x2F2F2218,
                0xBE0E1777,
                0xEA752DFE,
                0x8B021FA1,
                0xE5A0CC0F,
                0xB56F74E8,
                0x18ACF3D6,
                0xCE89E299,
                0xB4A84FE0,
                0xFD13E0B7,
                0x7CC43B81,
                0xD2ADA8D9,
                0x165FA266,
                0x80957705,
                0x93CC7314,
                0x211A1477,
                0xE6AD2065,
                0x77B5FA86,
                0xC75442F5,
                0xFB9D35CF,
                0xEBCDAF0C,
                0x7B3E89A0,
                0xD6411BD3,
                0xAE1E7E49,
                0x00250E2D,
                0x2071B35E,
                0x226800BB,
                0x57B8E0AF,
                0x2464369B,
                0xF009B91E,
                0x5563911D,
                0x59DFA6AA,
                0x78C14389,
                0xD95A537F,
                0x207D5BA2,
                0x02E5B9C5,
                0x83260376,
                0x6295CFA9,
                0x11C81968,
                0x4E734A41,
                0xB3472DCA,
                0x7B14A94A,
                0x1B510052,
                0x9A532915,
                0xD60F573F,
                0xBC9BC6E4,
                0x2B60A476,
                0x81E67400,
                0x08BA6FB5,
                0x571BE91F,
                0xF296EC6B,
                0x2A0DD915,
                0xB6636521,
                0xE7B9F9B6,
                0xFF34052E,
                0xC5855664,
                0x53B02D5D,
                0xA99F8FA1,
                0x08BA4799,
                0x6E85076A
            ),
            array(
                0x4B7A70E9,
                0xB5B32944,
                0xDB75092E,
                0xC4192623,
                0xAD6EA6B0,
                0x49A7DF7D,
                0x9CEE60B8,
                0x8FEDB266,
                0xECAA8C71,
                0x699A17FF,
                0x5664526C,
                0xC2B19EE1,
                0x193602A5,
                0x75094C29,
                0xA0591340,
                0xE4183A3E,
                0x3F54989A,
                0x5B429D65,
                0x6B8FE4D6,
                0x99F73FD6,
                0xA1D29C07,
                0xEFE830F5,
                0x4D2D38E6,
                0xF0255DC1,
                0x4CDD2086,
                0x8470EB26,
                0x6382E9C6,
                0x021ECC5E,
                0x09686B3F,
                0x3EBAEFC9,
                0x3C971814,
                0x6B6A70A1,
                0x687F3584,
                0x52A0E286,
                0xB79C5305,
                0xAA500737,
                0x3E07841C,
                0x7FDEAE5C,
                0x8E7D44EC,
                0x5716F2B8,
                0xB03ADA37,
                0xF0500C0D,
                0xF01C1F04,
                0x0200B3FF,
                0xAE0CF51A,
                0x3CB574B2,
                0x25837A58,
                0xDC0921BD,
                0xD19113F9,
                0x7CA92FF6,
                0x94324773,
                0x22F54701,
                0x3AE5E581,
                0x37C2DADC,
                0xC8B57634,
                0x9AF3DDA7,
                0xA9446146,
                0x0FD0030E,
                0xECC8C73E,
                0xA4751E41,
                0xE238CD99,
                0x3BEA0E2F,
                0x3280BBA1,
                0x183EB331,
                0x4E548B38,
                0x4F6DB908,
                0x6F420D03,
                0xF60A04BF,
                0x2CB81290,
                0x24977C79,
                0x5679B072,
                0xBCAF89AF,
                0xDE9A771F,
                0xD9930810,
                0xB38BAE12,
                0xDCCF3F2E,
                0x5512721F,
                0x2E6B7124,
                0x501ADDE6,
                0x9F84CD87,
                0x7A584718,
                0x7408DA17,
                0xBC9F9ABC,
                0xE94B7D8C,
                0xEC7AEC3A,
                0xDB851DFA,
                0x63094366,
                0xC464C3D2,
                0xEF1C1847,
                0x3215D908,
                0xDD433B37,
                0x24C2BA16,
                0x12A14D43,
                0x2A65C451,
                0x50940002,
                0x133AE4DD,
                0x71DFF89E,
                0x10314E55,
                0x81AC77D6,
                0x5F11199B,
                0x043556F1,
                0xD7A3C76B,
                0x3C11183B,
                0x5924A509,
                0xF28FE6ED,
                0x97F1FBFA,
                0x9EBABF2C,
                0x1E153C6E,
                0x86E34570,
                0xEAE96FB1,
                0x860E5E0A,
                0x5A3E2AB3,
                0x771FE71C,
                0x4E3D06FA,
                0x2965DCB9,
                0x99E71D0F,
                0x803E89D6,
                0x5266C825,
                0x2E4CC978,
                0x9C10B36A,
                0xC6150EBA,
                0x94E2EA78,
                0xA5FC3C53,
                0x1E0A2DF4,
                0xF2F74EA7,
                0x361D2B3D,
                0x1939260F,
                0x19C27960,
                0x5223A708,
                0xF71312B6,
                0xEBADFE6E,
                0xEAC31F66,
                0xE3BC4595,
                0xA67BC883,
                0xB17F37D1,
                0x018CFF28,
                0xC332DDEF,
                0xBE6C5AA5,
                0x65582185,
                0x68AB9802,
                0xEECEA50F,
                0xDB2F953B,
                0x2AEF7DAD,
                0x5B6E2F84,
                0x1521B628,
                0x29076170,
                0xECDD4775,
                0x619F1510,
                0x13CCA830,
                0xEB61BD96,
                0x0334FE1E,
                0xAA0363CF,
                0xB5735C90,
                0x4C70A239,
                0xD59E9E0B,
                0xCBAADE14,
                0xEECC86BC,
                0x60622CA7,
                0x9CAB5CAB,
                0xB2F3846E,
                0x648B1EAF,
                0x19BDF0CA,
                0xA02369B9,
                0x655ABB50,
                0x40685A32,
                0x3C2AB4B3,
                0x319EE9D5,
                0xC021B8F7,
                0x9B540B19,
                0x875FA099,
                0x95F7997E,
                0x623D7DA8,
                0xF837889A,
                0x97E32D77,
                0x11ED935F,
                0x16681281,
                0x0E358829,
                0xC7E61FD6,
                0x96DEDFA1,
                0x7858BA99,
                0x57F584A5,
                0x1B227263,
                0x9B83C3FF,
                0x1AC24696,
                0xCDB30AEB,
                0x532E3054,
                0x8FD948E4,
                0x6DBC3128,
                0x58EBF2EF,
                0x34C6FFEA,
                0xFE28ED61,
                0xEE7C3C73,
                0x5D4A14D9,
                0xE864B7E3,
                0x42105D14,
                0x203E13E0,
                0x45EEE2B6,
                0xA3AAABEA,
                0xDB6C4F15,
                0xFACB4FD0,
                0xC742F442,
                0xEF6ABBB5,
                0x654F3B1D,
                0x41CD2105,
                0xD81E799E,
                0x86854DC7,
                0xE44B476A,
                0x3D816250,
                0xCF62A1F2,
                0x5B8D2646,
                0xFC8883A0,
                0xC1C7B6A3,
                0x7F1524C3,
                0x69CB7492,
                0x47848A0B,
                0x5692B285,
                0x095BBF00,
                0xAD19489D,
                0x1462B174,
                0x23820E00,
                0x58428D2A,
                0x0C55F5EA,
                0x1DADF43E,
                0x233F7061,
                0x3372F092,
                0x8D937E41,
                0xD65FECF1,
                0x6C223BDB,
                0x7CDE3759,
                0xCBEE7460,
                0x4085F2A7,
                0xCE77326E,
                0xA6078084,
                0x19F8509E,
                0xE8EFD855,
                0x61D99735,
                0xA969A7AA,
                0xC50C06C2,
                0x5A04ABFC,
                0x800BCADC,
                0x9E447A2E,
                0xC3453484,
                0xFDD56705,
                0x0E1E9EC9,
                0xDB73DBD3,
                0x105588CD,
                0x675FDA79,
                0xE3674340,
                0xC5C43465,
                0x713E38D8,
                0x3D28F89E,
                0xF16DFF20,
                0x153E21E7,
                0x8FB03D4A,
                0xE6E39F2B,
                0xDB83ADF7
            ),
            array(
                0xE93D5A68,
                0x948140F7,
                0xF64C261C,
                0x94692934,
                0x411520F7,
                0x7602D4F7,
                0xBCF46B2E,
                0xD4A20068,
                0xD4082471,
                0x3320F46A,
                0x43B7D4B7,
                0x500061AF,
                0x1E39F62E,
                0x97244546,
                0x14214F74,
                0xBF8B8840,
                0x4D95FC1D,
                0x96B591AF,
                0x70F4DDD3,
                0x66A02F45,
                0xBFBC09EC,
                0x03BD9785,
                0x7FAC6DD0,
                0x31CB8504,
                0x96EB27B3,
                0x55FD3941,
                0xDA2547E6,
                0xABCA0A9A,
                0x28507825,
                0x530429F4,
                0x0A2C86DA,
                0xE9B66DFB,
                0x68DC1462,
                0xD7486900,
                0x680EC0A4,
                0x27A18DEE,
                0x4F3FFEA2,
                0xE887AD8C,
                0xB58CE006,
                0x7AF4D6B6,
                0xAACE1E7C,
                0xD3375FEC,
                0xCE78A399,
                0x406B2A42,
                0x20FE9E35,
                0xD9F385B9,
                0xEE39D7AB,
                0x3B124E8B,
                0x1DC9FAF7,
                0x4B6D1856,
                0x26A36631,
                0xEAE397B2,
                0x3A6EFA74,
                0xDD5B4332,
                0x6841E7F7,
                0xCA7820FB,
                0xFB0AF54E,
                0xD8FEB397,
                0x454056AC,
                0xBA489527,
                0x55533A3A,
                0x20838D87,
                0xFE6BA9B7,
                0xD096954B,
                0x55A867BC,
                0xA1159A58,
                0xCCA92963,
                0x99E1DB33,
                0xA62A4A56,
                0x3F3125F9,
                0x5EF47E1C,
                0x9029317C,
                0xFDF8E802,
                0x04272F70,
                0x80BB155C,
                0x05282CE3,
                0x95C11548,
                0xE4C66D22,
                0x48C1133F,
                0xC70F86DC,
                0x07F9C9EE,
                0x41041F0F,
                0x404779A4,
                0x5D886E17,
                0x325F51EB,
                0xD59BC0D1,
                0xF2BCC18F,
                0x41113564,
                0x257B7834,
                0x602A9C60,
                0xDFF8E8A3,
                0x1F636C1B,
                0x0E12B4C2,
                0x02E1329E,
                0xAF664FD1,
                0xCAD18115,
                0x6B2395E0,
                0x333E92E1,
                0x3B240B62,
                0xEEBEB922,
                0x85B2A20E,
                0xE6BA0D99,
                0xDE720C8C,
                0x2DA2F728,
                0xD0127845,
                0x95B794FD,
                0x647D0862,
                0xE7CCF5F0,
                0x5449A36F,
                0x877D48FA,
                0xC39DFD27,
                0xF33E8D1E,
                0x0A476341,
                0x992EFF74,
                0x3A6F6EAB,
                0xF4F8FD37,
                0xA812DC60,
                0xA1EBDDF8,
                0x991BE14C,
                0xDB6E6B0D,
                0xC67B5510,
                0x6D672C37,
                0x2765D43B,
                0xDCD0E804,
                0xF1290DC7,
                0xCC00FFA3,
                0xB5390F92,
                0x690FED0B,
                0x667B9FFB,
                0xCEDB7D9C,
                0xA091CF0B,
                0xD9155EA3,
                0xBB132F88,
                0x515BAD24,
                0x7B9479BF,
                0x763BD6EB,
                0x37392EB3,
                0xCC115979,
                0x8026E297,
                0xF42E312D,
                0x6842ADA7,
                0xC66A2B3B,
                0x12754CCC,
                0x782EF11C,
                0x6A124237,
                0xB79251E7,
                0x06A1BBE6,
                0x4BFB6350,
                0x1A6B1018,
                0x11CAEDFA,
                0x3D25BDD8,
                0xE2E1C3C9,
                0x44421659,
                0x0A121386,
                0xD90CEC6E,
                0xD5ABEA2A,
                0x64AF674E,
                0xDA86A85F,
                0xBEBFE988,
                0x64E4C3FE,
                0x9DBC8057,
                0xF0F7C086,
                0x60787BF8,
                0x6003604D,
                0xD1FD8346,
                0xF6381FB0,
                0x7745AE04,
                0xD736FCCC,
                0x83426B33,
                0xF01EAB71,
                0xB0804187,
                0x3C005E5F,
                0x77A057BE,
                0xBDE8AE24,
                0x55464299,
                0xBF582E61,
                0x4E58F48F,
                0xF2DDFDA2,
                0xF474EF38,
                0x8789BDC2,
                0x5366F9C3,
                0xC8B38E74,
                0xB475F255,
                0x46FCD9B9,
                0x7AEB2661,
                0x8B1DDF84,
                0x846A0E79,
                0x915F95E2,
                0x466E598E,
                0x20B45770,
                0x8CD55591,
                0xC902DE4C,
                0xB90BACE1,
                0xBB8205D0,
                0x11A86248,
                0x7574A99E,
                0xB77F19B6,
                0xE0A9DC09,
                0x662D09A1,
                0xC4324633,
                0xE85A1F02,
                0x09F0BE8C,
                0x4A99A025,
                0x1D6EFE10,
                0x1AB93D1D,
                0x0BA5A4DF,
                0xA186F20F,
                0x2868F169,
                0xDCB7DA83,
                0x573906FE,
                0xA1E2CE9B,
                0x4FCD7F52,
                0x50115E01,
                0xA70683FA,
                0xA002B5C4,
                0x0DE6D027,
                0x9AF88C27,
                0x773F8641,
                0xC3604C06,
                0x61A806B5,
                0xF0177A28,
                0xC0F586E0,
                0x006058AA,
                0x30DC7D62,
                0x11E69ED7,
                0x2338EA63,
                0x53C2DD94,
                0xC2C21634,
                0xBBCBEE56,
                0x90BCB6DE,
                0xEBFC7DA1,
                0xCE591D76,
                0x6F05E409,
                0x4B7C0188,
                0x39720A3D,
                0x7C927C24,
                0x86E3725F,
                0x724D9DB9,
                0x1AC15BB4,
                0xD39EB8FC,
                0xED545578,
                0x08FCA5B5,
                0xD83D7CD3,
                0x4DAD0FC4,
                0x1E50EF5E,
                0xB161E6F8,
                0xA28514D9,
                0x6C51133C,
                0x6FD5C7E7,
                0x56E14EC4,
                0x362ABFCE,
                0xDDC6C837,
                0xD79A3234,
                0x92638212,
                0x670EFA8E,
                0x406000E0
            ),
            array(
                0x3A39CE37,
                0xD3FAF5CF,
                0xABC27737,
                0x5AC52D1B,
                0x5CB0679E,
                0x4FA33742,
                0xD3822740,
                0x99BC9BBE,
                0xD5118E9D,
                0xBF0F7315,
                0xD62D1C7E,
                0xC700C47B,
                0xB78C1B6B,
                0x21A19045,
                0xB26EB1BE,
                0x6A366EB4,
                0x5748AB2F,
                0xBC946E79,
                0xC6A376D2,
                0x6549C2C8,
                0x530FF8EE,
                0x468DDE7D,
                0xD5730A1D,
                0x4CD04DC6,
                0x2939BBDB,
                0xA9BA4650,
                0xAC9526E8,
                0xBE5EE304,
                0xA1FAD5F0,
                0x6A2D519A,
                0x63EF8CE2,
                0x9A86EE22,
                0xC089C2B8,
                0x43242EF6,
                0xA51E03AA,
                0x9CF2D0A4,
                0x83C061BA,
                0x9BE96A4D,
                0x8FE51550,
                0xBA645BD6,
                0x2826A2F9,
                0xA73A3AE1,
                0x4BA99586,
                0xEF5562E9,
                0xC72FEFD3,
                0xF752F7DA,
                0x3F046F69,
                0x77FA0A59,
                0x80E4A915,
                0x87B08601,
                0x9B09E6AD,
                0x3B3EE593,
                0xE990FD5A,
                0x9E34D797,
                0x2CF0B7D9,
                0x022B8B51,
                0x96D5AC3A,
                0x017DA67D,
                0xD1CF3ED6,
                0x7C7D2D28,
                0x1F9F25CF,
                0xADF2B89B,
                0x5AD6B472,
                0x5A88F54C,
                0xE029AC71,
                0xE019A5E6,
                0x47B0ACFD,
                0xED93FA9B,
                0xE8D3C48D,
                0x283B57CC,
                0xF8D56629,
                0x79132E28,
                0x785F0191,
                0xED756055,
                0xF7960E44,
                0xE3D35E8C,
                0x15056DD4,
                0x88F46DBA,
                0x03A16125,
                0x0564F0BD,
                0xC3EB9E15,
                0x3C9057A2,
                0x97271AEC,
                0xA93A072A,
                0x1B3F6D9B,
                0x1E6321F5,
                0xF59C66FB,
                0x26DCF319,
                0x7533D928,
                0xB155FDF5,
                0x03563482,
                0x8ABA3CBB,
                0x28517711,
                0xC20AD9F8,
                0xABCC5167,
                0xCCAD925F,
                0x4DE81751,
                0x3830DC8E,
                0x379D5862,
                0x9320F991,
                0xEA7A90C2,
                0xFB3E7BCE,
                0x5121CE64,
                0x774FBE32,
                0xA8B6E37E,
                0xC3293D46,
                0x48DE5369,
                0x6413E680,
                0xA2AE0810,
                0xDD6DB224,
                0x69852DFD,
                0x09072166,
                0xB39A460A,
                0x6445C0DD,
                0x586CDECF,
                0x1C20C8AE,
                0x5BBEF7DD,
                0x1B588D40,
                0xCCD2017F,
                0x6BB4E3BB,
                0xDDA26A7E,
                0x3A59FF45,
                0x3E350A44,
                0xBCB4CDD5,
                0x72EACEA8,
                0xFA6484BB,
                0x8D6612AE,
                0xBF3C6F47,
                0xD29BE463,
                0x542F5D9E,
                0xAEC2771B,
                0xF64E6370,
                0x740E0D8D,
                0xE75B1357,
                0xF8721671,
                0xAF537D5D,
                0x4040CB08,
                0x4EB4E2CC,
                0x34D2466A,
                0x0115AF84,
                0xE1B00428,
                0x95983A1D,
                0x06B89FB4,
                0xCE6EA048,
                0x6F3F3B82,
                0x3520AB82,
                0x011A1D4B,
                0x277227F8,
                0x611560B1,
                0xE7933FDC,
                0xBB3A792B,
                0x344525BD,
                0xA08839E1,
                0x51CE794B,
                0x2F32C9B7,
                0xA01FBAC9,
                0xE01CC87E,
                0xBCC7D1F6,
                0xCF0111C3,
                0xA1E8AAC7,
                0x1A908749,
                0xD44FBD9A,
                0xD0DADECB,
                0xD50ADA38,
                0x0339C32A,
                0xC6913667,
                0x8DF9317C,
                0xE0B12B4F,
                0xF79E59B7,
                0x43F5BB3A,
                0xF2D519FF,
                0x27D9459C,
                0xBF97222C,
                0x15E6FC2A,
                0x0F91FC71,
                0x9B941525,
                0xFAE59361,
                0xCEB69CEB,
                0xC2A86459,
                0x12BAA8D1,
                0xB6C1075E,
                0xE3056A0C,
                0x10D25065,
                0xCB03A442,
                0xE0EC6E0E,
                0x1698DB3B,
                0x4C98A0BE,
                0x3278E964,
                0x9F1F9532,
                0xE0D392DF,
                0xD3A0342B,
                0x8971F21E,
                0x1B0A7441,
                0x4BA3348C,
                0xC5BE7120,
                0xC37632D8,
                0xDF359F8D,
                0x9B992F2E,
                0xE60B6F47,
                0x0FE3F11D,
                0xE54CDA54,
                0x1EDAD891,
                0xCE6279CF,
                0xCD3E7E6F,
                0x1618B166,
                0xFD2C1D05,
                0x848FD2C5,
                0xF6FB2299,
                0xF523F357,
                0xA6327623,
                0x93A83531,
                0x56CCCD02,
                0xACF08162,
                0x5A75EBB5,
                0x6E163697,
                0x88D273CC,
                0xDE966292,
                0x81B949D0,
                0x4C50901B,
                0x71C65614,
                0xE6C6C7BD,
                0x327A140A,
                0x45E1D006,
                0xC3F27B9A,
                0xC9AA53FD,
                0x62A80F00,
                0xBB25BFE2,
                0x35BDD2F6,
                0x71126905,
                0xB2040222,
                0xB6CBCF7C,
                0xCD769C2B,
                0x53113EC0,
                0x1640E3D3,
                0x38ABBD60,
                0x2547ADF0,
                0xBA38209C,
                0xF746CE76,
                0x77AFA1C5,
                0x20756060,
                0x85CBFE4E,
                0x8AE88DD8,
                0x7AAAF9B0,
                0x4CF9AA7E,
                0x1948C25C,
                0x02FB8A8C,
                0x01C36AE4,
                0xD6EBE1F9,
                0x90D4F869,
                0xA65CDEA0,
                0x3F09252D,
                0xC208E69F,
                0xB74E6132,
                0xCE77E25B,
                0x578FDFE3,
                0x3AC372E6
            )
        );
    }
}


<?php
namespace yii\adminUi\widget;

use yii\base\InvalidConfigException;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;

/**
 * Bootstrap box component.
 *
 * @see http://getbootstrap.com/javascript/#dropdowns
 * @author Mithun Mandal <mithun12000@gmail.com>
 * @since 2.0
 */
class PageHeader extends Widget
{
    const TYPE_OTHER = "div";
    const TYPE_SUB_COMPONENT = "h6";
    const TYPE_INFO = "h5";
    const TYPE_COMPONENT = "h4";
    const TYPE_TITLE = "h1";
    const TYPE_SECTION = "h3";
    const TYPE_DEFAULT = "h2";

    /**
     * @var string the header content in the modal window.
     */
    public $type;

    /**
     * Initializes the widget.
     */
    public function init()
    {
        parent::init();
        $this->initOptions();

        echo Html::beginTag($this->type, $this->options) . "\n";
    }

    /**
     * Renders the widget.
     */
    public function run()
    {
        echo "\n" . Html::endTag($this->type);
    }

    /**
     * Initializes the widget options.
     * This method sets the default values for various options.
     */
    protected function initOptions()
    {
        if(!$this->type){
            $this->type = self::TYPE_DEFAULT;
        }

        $this->options = array_merge([
            'class' => 'page-header',
        ], $this->options);
    }
}


<?php

/**
 * @copyright Copyright © Kartik Visweswaran, Krajee.com, 2014
 * @package yii2-widgets
 * @version 1.0.0
 */

namespace yii\adminUi\widget;

use Yii;
use yii\helpers\ArrayHelper;
use yii\helpers\Json;
use yii\base\InvalidConfigException;
use yii\adminUi\assetsBundle\AdminUiDynamicFormAsset;
use yii\adminUi\assetsBundle\AdminUiInputMaskAsset;
use yii\helpers\Html;

/**
 * Dynamic form element based on Dynamic form Jquery plugin
 *
 */
class DynamicField extends InputWidget
{
    public $form;

    public $type = 'textInput';

    public $list = false;

    public $mask = '';
    public $maskType = '';

    public $enableClientValidation;
    public $enableAjaxValidation;

    public static $autoIdPrefix = 'dynamicele';

    public $clientId;

    protected $data = [];

    /**
     * Initializes the widget
     *
     * @throw InvalidConfigException
     */
    public function init(){
        parent::init();
    }

    public function run() {
        $id = $this->getId();
        Html::addCssClass($this->options, "form-control");
        //array of models
        $models = ArrayHelper::getValue($this->options, 'models');

        $data_count = 0;
        if(is_array($models)){
            foreach($models as $singleModel){
            if($singleModel->{$this->attribute}){
                $data_count++;
            }
        }

        }

        if($data_count && is_array($models) && count($models)){
            unset($this->options['models']);
            unset($this->options['model']);
            //unset($this->options['id']);

            $count = 0;
            foreach($models as $singleModel){
                //echo $singleModel->{$this->attribute};
                if($singleModel->{$this->attribute} == 0){
                    continue;
                }
                \Yii::trace(print_r($singleModel,true),__METHOD__);
                \Yii::trace(print_r($this->options,true),__METHOD__);
                $this->data[][$this->name] = $singleModel->{$this->attribute};
                $count++;
            }
            \Yii::trace("render done problem ",__METHOD__);
        }else{
            $singleModel = ArrayHelper::getValue($this->options, 'model');
            unset($this->options['model']);
            unset($this->options['models']);
        }

        $this->options['value'] = '';
        echo Html::beginTag('div', ['class'=>  'input-group']);
        echo $this->getInput($this->type, $this->list,$singleModel);
        $this->generateButton();
        echo Html::endTag('div');

        $this->registerAssets();
    }

    public function generateButton() {
        echo Html::beginTag('div', ['class'=>  'input-group-btn']);
        echo Html::a('', '#',['id' => $this->getId().'_del','class'=>'btn btn-danger']);
        echo Html::a('', '#',['id' => $this->getId().'_add','class'=>'btn btn-success']);
        echo Html::endTag('div');
    }

    /**
     * Registers the needed assets
     */
    public function registerAssets(){
        $view = $this->getView();
        if($this->mask && $this->maskType){
            AdminUiInputMaskAsset::register($view);
            $this->clientOptions = [$this->maskType => $this->mask];
            $this->registerPlugin('inputmask');
        }

        //$totalClientlength = count($this->form->attributes);

        //$form_client_option = Json::encode($this->getClientOptions());
        //print($form_client_option);
        $form_client_option = $this->getClientOptions();

        AdminUiDynamicFormAsset::register($view);
        $id = $this->getId();
        $js = "jQuery('#$this->clientId').dynamicForm(\"#{$id}_add\",\"#{$id}_del\",".'{
                limit:10,
                data:'.Json::encode($this->data).',
                normalizeFullForm:false,
                normalizeSource:false,
                afterRemoveAll:function(){
                    jQuery("#'.$this->getId().'_dis").remove();
                },
                afterInit:function(){
                    console.log("call after initialize");
                },
                cloneDone:function(clone){
                    console.log("call after clone done");
                    //console.log(jQuery(clone));
                    if(jQuery(".'.$this->clientId.'").length>0 && jQuery("#'.$this->getId().'_dis").length==0){
                        jQuery("#'.$this->clientId.'").find(".input-group-btn").append(jQuery(\''.Html::tag('button','',['id' => $this->getId().'_dis','class'=>'btn disabled']).'\'));
                    }

                    var validate = '.Json::encode($this->getClientOptions()).';

                    var id;
                    jQuery(clone).find("input, checkbox, select, textarea").each(function(){
                        id = jQuery(this).attr("id");
                    });

                    validate.id = id;
                    validate.input = "#"+id;
                    validate.container = "#"+jQuery(clone).attr("id");

                    jQuery("#'.$this->form->id.'").yiiActiveForm("add",validate);

                },
                beforeRemove:function(clone){
                    console.log("call before removing clone");
                    //console.log(clone);
                    //console.log(jQuery(clone));

                    var id;
                    jQuery(clone).find("input, checkbox, select, textarea").each(function(){
                        id = jQuery(this).attr("id");
                    });

                    jQuery("#'.$this->form->id.'").yiiActiveForm("remove",id);
                }
            });';
        $view->registerJs($js);
        //$this->clientOptions = ["#plus", "#minus", {limit:5}];

    }
}


<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\adminUi\widget;
use yii\adminUi\assetsBundle\AdminUiAsset;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;

/**
 * ButtonGroup renders a button group bootstrap component.
 *
 * For example,
 *
 * ```php
 * // a button group with items configuration
 * echo ButtonGroup::widget([
 *     'buttons' => [
 *         ['label' => 'A'],
 *         ['label' => 'B'],
 *     ]
 * ]);
 *
 * // button group with an item as a string
 * echo ButtonGroup::widget([
 *     'buttons' => [
 *         Button::widget(['label' => 'A']),
 *         ['label' => 'B'],
 *     ]
 * ]);
 * ```
 * @see http://getbootstrap.com/javascript/#buttons
 * @see http://getbootstrap.com/components/#btn-groups
 * @author Antonio Ramirez <amigo.cobos@gmail.com>
 * @since 2.0
 */
class ButtonGroup extends Widget
{
    const HORIZONTAL = 1;
    const VERTICLE = 2;

    const DEFAULT_ORIENTATION = 1;

    /**
     * @var string the button label.
     */
    public $orientation = self::DEFAULT_ORIENTATION;
    /**
     * @var array list of buttons. Each array element represents a single button
     * which can be specified as a string or an array of the following structure:
     *
     * - label: string, required, the button label.
     * - options: array, optional, the HTML attributes of the button.
     */
    public $buttons = [];
    /**
     * @var boolean whether to HTML-encode the button labels.
     */
    public $encodeLabels = true;

    /**
     * Initializes the widget.
     * If you override this method, make sure you call the parent implementation first.
     */
    public function init()
    {
        parent::init();
        if($this->orientation == self::VERTICLE){
            Html::addCssClass($this->options, 'btn-group-vertical');
        }else{
            Html::addCssClass($this->options, 'btn-group');
        }
    }

    /**
     * Renders the widget.
     */
    public function run()
    {
        echo Html::tag('div', $this->renderButtons(), $this->options);
        AdminUiAsset::register($this->getView());
    }

    /**
     * Generates the buttons that compound the group as specified on [[buttons]].
     * @return string the rendering result.
     */
    protected function renderButtons()
    {
        $buttons = [];
        foreach ($this->buttons as $button) {
            if (is_array($button)) {
                if(isset($button['dropdown'])){
                    $option = array_merge($button['dropdown'], [
                        'view' => $this->getView()
                    ]);
                    $buttons[] = ButtonDropdown::widget($option);
                }else{
                    $label = ArrayHelper::getValue($button, 'label');
                    $options = ArrayHelper::getValue($button, 'options');
                    $buttons[] = Button::widget([
                        'label' => $label,
                        'options' => $options,
                        'encodeLabel' => $this->encodeLabels,
                        'view' => $this->getView()
                    ]);
                }
            } else {
                $buttons[] = $button;
            }
        }

        return implode("\n", $buttons);
    }
}


<?php

/**
 * @file
 * TeamSpeak 3 PHP Framework
 *
 * $Id: TCP.php 10/11/2013 11:35:22 scp@orilla $
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package   TeamSpeak3
 * @version   1.1.23
 * @author    Sven 'ScP' Paulsen
 * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
 */

namespace TeamSpeak3\Transport;

use TeamSpeak3\Helper\Signal;
use TeamSpeak3\Helper\StringHelper;
use TeamSpeak3\Ts3Exception;

/**
 * @class TCP
 * @brief Class for connecting to a remote server through TCP.
 */
class TCP extends AbstractTransport
{
    /**
     * Connects to a remote server.
     *
     * @throws Ts3Exception
     * @return void
     */
    public function connect()
    {
        if ($this->stream !== null) {
            return;
        }

        $host = strval($this->config["host"]);
        $port = strval($this->config["port"]);

        $address = "tcp://" . $host . ":" . $port;
        $timeout = intval($this->config["timeout"]);

        $this->stream = @stream_socket_client($address, $errno, $errstr, $timeout);

        if ($this->stream === false) {
            throw new Ts3Exception(
                StringHelper::factory($errstr)->toUtf8()->toString(),
                $errno
            );
        }

        @stream_set_timeout($this->stream, $timeout);
        @stream_set_blocking($this->stream, $this->config["blocking"] ? 1 : 0);
    }

    /**
     * Disconnects from a remote server.
     *
     * @return void
     */
    public function disconnect()
    {
        if ($this->stream === null) {
            return;
        }

        $this->stream = null;

        Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "Disconnected");
    }

    /**
     * Reads data from the stream.
     *
     * @param  integer $length
     * @throws Ts3Exception
     * @return StringHelper
     */
    public function read($length = 4096)
    {
        $this->connect();
        $this->waitForReadyRead();

        $data = @stream_get_contents($this->stream, $length);

        Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataRead", $data);

        if ($data === false) {
            throw new Ts3Exception(
                "connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost"
            );
        }

        return new StringHelper($data);
    }

    /**
     * Reads a single line of data from the stream.
     *
     * @param  string $token
     * @throws Ts3Exception
     * @return StringHelper
     */
    public function readLine($token = "\n")
    {
        $this->connect();

        $line = StringHelper::factory("");

        while (!$line->endsWith($token)) {
            $this->waitForReadyRead();

            $data = @fgets($this->stream, 4096);

            Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataRead", $data);

            if ($data === false) {
                if ($line->count()) {
                    $line->append($token);
                } else {
                    throw new Ts3Exception(
                        "connection to server '" . $this->config["host"] . ":" . $this->config["port"] . "' lost"
                    );
                }
            } else {
                $line->append($data);
            }
        }

        return $line->trim();
    }

    /**
     * Writes data to the stream.
     *
     * @param  string $data
     * @return void
     */
    public function send($data)
    {
        $this->connect();

        @stream_socket_sendto($this->stream, $data);

        Signal::getInstance()->emit(strtolower($this->getAdapterType()) . "DataSend", $data);
    }

    /**
     * Writes a line of data to the stream.
     *
     * @param  string $data
     * @param  string $separator
     * @return void
     */
    public function sendLine($data, $separator = "\n")
    {
        $size = strlen($data);
        $pack = 4096;

        for ($seek = 0; $seek < $size;) {
            $rest = $size - $seek;
            $pack = $rest < $pack ? $rest : $pack;
            $buff = substr($data, $seek, $pack);
            $seek = $seek + $pack;

            if ($seek >= $size) {
                $buff .= $separator;
            }

            $this->send($buff);
        }
    }
}


<?php

/**
 * @file
 * TeamSpeak 3 PHP Framework
 *
 * $Id: Text.php 10/11/2013 11:35:22 scp@orilla $
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package   TeamSpeak3
 * @version   1.1.23
 * @author    Sven 'ScP' Paulsen
 * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
 */

namespace TeamSpeak3\Viewer;

use TeamSpeak3\Helper\StringHelper;
use TeamSpeak3\Node\AbstractNode;

/**
 * @class Text
 * @brief Renders nodes used in ASCII-based TeamSpeak 3 viewers.
 */
class Text implements IViewer
{
    /**
     * A pre-defined pattern used to display a node in a TeamSpeak 3 viewer.
     *
     * @var string
     */
    protected $pattern = "%0%1 %2\n";

    /**
     * Returns the code needed to display a node in a TeamSpeak 3 viewer.
     *
     * @param  AbstractNode $node
     * @param  array $siblings
     * @return StringHelper
     */
    public function fetchObject(AbstractNode $node, array $siblings = array())
    {
        $this->currObj = $node;
        $this->currSib = $siblings;

        $args = array(
            $this->getPrefix(),
            $this->getCorpusIcon(),
            $this->getCorpusName(),
        );

        return StringHelper::factory($this->pattern)->arg($args);
    }

    /**
     * Returns the ASCII string to display the prefix of the current node.
     *
     * @return string
     */
    protected function getPrefix()
    {
        $prefix = "";

        if (count($this->currSib)) {
            $last = array_pop($this->currSib);

            foreach ($this->currSib as $sibling) {
                $prefix .= ($sibling) ? "| " : "  ";
            }

            $prefix .= ($last) ? "\\-" : "|-";
        }

        return $prefix;
    }

    /**
     * Returns an ASCII string which can be used to display the status icon for a
     * AbstractNode object.
     *
     * @return string
     */
    protected function getCorpusIcon()
    {
        return $this->currObj->getSymbol();
    }

    /**
     * Returns a string for the current corpus element which contains the display name
     * for the current AbstractNode object.
     *
     * @return string
     */
    protected function getCorpusName()
    {
        return $this->currObj;
    }
}


<?php

/**
 * @file
 * TeamSpeak 3 PHP Framework
 *
 * $Id: AbstractAdapter.php 10/11/2013 11:35:22 scp@orilla $
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 *
 * @package   TeamSpeak3
 * @version   1.1.23
 * @author    Sven 'ScP' Paulsen
 * @copyright Copyright (c) 2010 by Planet TeamSpeak. All rights reserved.
 */

namespace TeamSpeak3\Transport;

use TeamSpeak3\Helper\Signal;
use TeamSpeak3\Helper\StringHelper;
use TeamSpeak3\Ts3Exception;
use TeamSpeak3\Adapter\AbstractAdapter;

/**
 * @class AbstractTransport
 * @brief Abstract class for connecting to a TeamSpeak 3 Server through different ways of transport.
 */
abstract class AbstractTransport
{
    /**
     * Stores user-provided configuration settings.
     *
     * @var array
     */
    protected $config = null;

    /**
     * Stores the stream resource of the connection.
     *
     * @var resource
     */
    protected $stream = null;

    /**
     * Stores the AbstractAdapter object using this transport.
     *
     * @var AbstractAdapter
     */
    protected $adapter = null;

    /**
     * The AbstractTransport constructor.
     *
     * @param  array $config
     * @throws Ts3Exception
     * @return AbstractTransport
     */
    public function __construct(array $config)
    {
        if (!array_key_exists("host", $config)) {
            throw new Ts3Exception(
                "config must have a key for 'host' which specifies the server host name"
            );
        }

        if (!array_key_exists("port", $config)) {
            throw new Ts3Exception(
                "config must have a key for 'port' which specifies the server port number"
            );
        }

        if (!array_key_exists("timeout", $config)) {
            $config["timeout"] = 10;
        }

        if (!array_key_exists("blocking", $config)) {
            $config["blocking"] = 1;
        }

        $this->config = $config;
    }

    /**
     * Commit pending data.
     *
     * @return array
     */
    public function __sleep()
    {
        return array("config");
    }

    /**
     * Reconnects to the remote server.
     *
     * @return void
     */
    public function __wakeup()
    {
        $this->connect();
    }

    /**
     * The AbstractTransport destructor.
     *
     * @return void
     */
    public function __destruct()
    {
        if ($this->adapter instanceof AbstractAdapter) {
            $this->adapter->__destruct();
        }

        $this->disconnect();
    }

    /**
     * Connects to a remote server.
     *
     * @throws Ts3Exception
     * @return void
     */
    abstract public function connect();

    /**
     * Disconnects from a remote server.
     *
     * @return void
     */
    abstract public function disconnect();

    /**
     * Reads data from the stream.
     *
     * @param  integer $length
     * @throws Ts3Exception
     * @return StringHelper
     */
    abstract public function read($length = 4096);

    /**
     * Writes data to the stream.
     *
     * @param  string $data
     * @return void
     */
    abstract public function send($data);

    /**
     * Returns the underlying stream resource.
     *
     * @return resource
     */
    public function getStream()
    {
        return $this->stream;
    }

    /**
     * Returns the configuration variables in this adapter.
     *
     * @param  string $key
     * @param  mixed $default
     * @return array
     */
    public function getConfig($key = null, $default = null)
    {
        if ($key !== null) {
            return array_key_exists($key, $this->config) ? $this->config[$key] : $default;
        }

        return $this->config;
    }

    /**
     * Sets the AbstractAdapter object using this transport.
     *
     * @param  AbstractAdapter $adapter
     * @return void
     */
    public function setAdapter(AbstractAdapter $adapter)
    {
        $this->adapter = $adapter;
    }

    /**
     * Returns the AbstractAdapter object using this transport.
     *
     * @return AbstractAdapter
     */
    public function getAdapter()
    {
        return $this->adapter;
    }

    /**
     * Returns the adapter type.
     *
     * @return string
     */
    public function getAdapterType()
    {
        if ($this->adapter instanceof AbstractAdapter) {
            $string = StringHelper::factory(get_class($this->adapter));

            return $string->substr($string->findLast("\\"))->replace(array("\\", " "), "")->toString();
        }

        return "Unknown";
    }

    /**
     * Returns header/meta data from stream pointer.
     *
     * @throws Ts3Exception
     * @return array
     */
    public function getMetaData()
    {
        if ($this->stream === null) {
            throw new Ts3Exception("unable to retrieve header/meta data from stream pointer");
        }

        return stream_get_meta_data($this->stream);
    }

    /**
     * Returns TRUE if the transport is connected.
     *
     * @return boolean
     */
    public function isConnected()
    {
        return (is_resource($this->stream)) ? true : false;
    }

    /**
     * Blocks a stream until data is available for reading if the stream is connected
     * in non-blocking mode.
     *
     * @param  integer $time
     * @return void
     */
    protected function waitForReadyRead($time = 0)
    {
        if (!$this->isConnected() || $this->config["blocking"]) {
            return;
        }

        do {
            $read = array($this->stream);
            $null = null;

            if ($time) {
                Signal::getInstance()->emit(
                    strtolower($this->getAdapterType()) . "WaitTimeout",
                    $time,
                    $this->getAdapter()
                );
            }

            $time = $time + $this->config["timeout"];
        } while (@stream_select($read, $null, $null, $this->config["timeout"]) == 0);
    }
}