Exakat\Reports\Devoops::Appinfo PHP Method

Appinfo() protected method

protected Appinfo ( )
    protected function Appinfo()
    {
        $css = new \Stdclass();
        $css->displayTitles = true;
        $css->titles = array('File');
        $css->readOrder = $css->titles;
        $extensions = array('PHP' => array('Short tags' => 'Structures/ShortTags', 'Echo tags <?=' => 'Php/EchoTagUsage', 'Incompilable' => 'Php/Incompilable', '@ operator' => 'Structures/Noscream', 'Alternative syntax' => 'Php/AlternativeSyntax', 'Magic constants' => 'Constants/MagicConstantUsage', 'halt compiler' => 'Php/Haltcompiler', 'Assertions' => 'Php/AssertionUsage', 'Casting' => 'Php/CastingUsage', 'Resources' => 'Structures/ResourcesUsage', 'Nested Loops' => 'Structures/NestedLoops', 'Autoload' => 'Php/AutoloadUsage', 'inclusion' => 'Structures/IncludeUsage', 'include_once' => 'Structures/OnceUsage', 'Output control' => 'Extensions/Extob', 'Goto' => 'Php/Gotonames', 'Labels' => 'Php/Labelnames', 'Coalesce' => 'Php/Coalesce', 'Null Coalesce' => 'Php/NullCoalesce', 'File upload' => 'Structures/FileUploadUsage', 'Environnement Variables' => 'Php/UsesEnv'), 'Composer' => array('composer.json' => 'Composer/UseComposer', 'composer autoload' => 'Composer/Autoload'), 'Web' => array('$_GET, _POST...' => 'Php/UseWeb'), 'CLI' => array('$argv, $argc' => 'Php/UseCli', 'CLI script' => 'Files/IsCliScript'), 'Composer Packages' => array(), 'Namespaces' => array('Namespaces' => 'Namespaces/Namespacesnames', 'Alias' => 'Namespaces/Alias'), 'Variables' => array('References' => 'Variables/References', 'Array' => 'Arrays/Arrayindex', 'Multidimensional arrays' => 'Arrays/Multidimensional', 'Array short syntax' => 'Arrays/ArrayNSUsage', 'List short syntax' => 'Structures/ListShortSyntax', 'Variable variables' => 'Variables/VariableVariables', 'PHP arrays' => 'Arrays/Phparrayindex', 'Globals' => 'Structures/GlobalUsage', 'PHP SuperGlobals' => 'Php/SuperGlobalUsage'), 'Functions' => array('Functions' => 'Functions/Functionnames', 'Redeclared PHP Functions' => 'Functions/RedeclaredPhpFunction', 'Closures' => 'Functions/Closures', 'Typehint' => 'Functions/Typehints', 'Scalar Typehint' => 'Php/ScalarTypehintUsage', 'Return Typehint' => 'Php/ReturnTypehintUsage', 'Nullable Typehint' => 'Php/UseNullableType', 'Static variables' => 'Variables/StaticVariables', 'Function dereferencing' => 'Structures/FunctionSubscripting', 'Constant scalar expression' => 'Structures/ConstantScalarExpression', '... usage' => 'Php/EllipsisUsage', 'func_get_args' => 'Functions/VariableArguments', 'Dynamic functioncall' => 'Functions/Dynamiccall', 'Recursive Functions' => 'Functions/Recursive', 'Generator Functions' => 'Functions/IsGenerator', 'Conditioned Function' => 'Functions/ConditionedFunctions'), 'Classes' => array('Classes' => 'Classes/Classnames', 'Anonymous Classes' => 'Classes/Anonymous', 'Class aliases' => 'Classes/ClassAliasUsage', 'Abstract classes' => 'Classes/Abstractclass', 'Interfaces' => 'Interfaces/Interfacenames', 'Traits' => 'Traits/Traitnames', 'Static properties' => 'Classes/StaticProperties', 'Static methods' => 'Classes/StaticMethods', 'Abstract methods' => 'Classes/Abstractmethods', 'Final methods' => 'Classes/Finalmethod', 'Class constants' => 'Classes/ConstantDefinition', 'Overwritten constants' => 'Classes/OverwrittenConst', 'Magic methods' => 'Classes/MagicMethod', 'Cloning' => 'Classes/CloningUsage', 'Dynamic class call' => 'Classes/VariableClasses', 'PHP 4 constructor' => 'Classes/OldStyleConstructor', 'Multiple class in one file' => 'Classes/MultipleClassesInFile'), 'Constants' => array('Constants' => 'Constants/ConstantUsage', 'Boolean' => 'Type/BooleanValue', 'Null' => 'Type/NullValue', 'Variable Constant' => 'Constants/VariableConstant', 'PHP constants' => 'Constants/PhpConstantUsage', 'PHP Magic constants' => 'Constants/MagicConstantUsage', 'Conditioned constant' => 'Constants/ConditionedConstants'), 'Numbers' => array('Integers' => 'Type/Integer', 'Hexadecimal' => 'Type/Hexadecimal', 'Octal' => 'Type/Octal', 'Binary' => 'Type/Binary', 'Real' => 'Type/Real'), 'Strings' => array('Heredoc' => 'Type/Heredoc', 'Nowdoc' => 'Type/Nowdoc'), 'Errors' => array('Throw exceptions' => 'Php/ThrowUsage', 'Try...Catch' => 'Php/TryCatchUsage', 'Multiple catch' => 'Structures/MultipleCatch', 'Multiple Exceptions' => 'Exceptions/MultipleCatch', 'Finally' => 'Structures/TryFinally', 'Trigger error' => 'Php/TriggerErrorUsage', 'Error messages' => 'Structures/ErrorMessages'), 'External systems' => array('System' => 'Structures/ShellUsage', 'Files' => 'Structures/FileUsage', 'LDAP' => 'Extensions/Extldap', 'mail' => 'Structures/MailUsage'), 'Extensions' => array('ext/amqp' => 'Extensions/Extamqp', 'ext/apache' => 'Extensions/Extapache', 'ext/apc' => 'Extensions/Extapc', 'ext/apcu' => 'Extensions/Extapcu', 'ext/array' => 'Extensions/Extarray', 'ext/ast' => 'Extensions/Extast', 'ext/bcmath' => 'Extensions/Extbcmath', 'ext/bzip2' => 'Extensions/Extbzip2', 'ext/cairo' => 'Extensions/Extcairo', 'ext/calendar' => 'Extensions/Extcalendar', 'ext/com' => 'Extensions/Extcom', 'ext/crypto' => 'Extensions/Extcrypto', 'ext/ctype' => 'Extensions/Extctype', 'ext/curl' => 'Extensions/Extcurl', 'ext/cyrus' => 'Extensions/Extcyrus', 'ext/date' => 'Extensions/Extdate', 'ext/dba' => 'Extensions/Extdba', 'ext/dio' => 'Extensions/Extdio', 'ext/dom' => 'Extensions/Extdom', 'ext/eaccelerator' => 'Extensions/Exteaccelerator', 'ext/enchant' => 'Extensions/Extenchant', 'ext/ereg' => 'Extensions/Extereg', 'ext/event' => 'Extensions/Extevent', 'ext/ev' => 'Extensions/Extev', 'ext/exif' => 'Extensions/Extexif', 'ext/expect' => 'Extensions/Extexpect', 'ext/fann' => 'Extensions/Extfann', 'ext/fdf' => 'Extensions/Extfdf', 'ext/ffmpeg' => 'Extensions/Extffmpeg', 'ext/file' => 'Extensions/Extfile', 'ext/fileinfo' => 'Extensions/Extfileinfo', 'ext/filter' => 'Extensions/Extfilter', 'ext/fpm' => 'Extensions/Extfpm', 'ext/ftp' => 'Extensions/Extftp', 'ext/gd' => 'Extensions/Extgd', 'ext/gearman' => 'Extensions/Extgearman', 'ext/geoip' => 'Extensions/Extgeoip', 'ext/gettext' => 'Extensions/Extgettext', 'ext/gmagick' => 'Extensions/Extgmagick', 'ext/gmp' => 'Extensions/Extgmp', 'ext/gnupg' => 'Extensions/Extgnupg', 'ext/hash' => 'Extensions/Exthash', 'ext/php_http' => 'Extensions/Exthttp', 'ext/ibase' => 'Extensions/Extibase', 'ext/iconv' => 'Extensions/Exticonv', 'ext/iis' => 'Extensions/Extiis', 'ext/imagick' => 'Extensions/Extimagick', 'ext/imap' => 'Extensions/Extimap', 'ext/info' => 'Extensions/Extinfo', 'ext/inotify' => 'Extensions/Extinotify', 'ext/intl' => 'Extensions/Extintl', 'ext/json' => 'Extensions/Extjson', 'ext/kdm5' => 'Extensions/Extkdm5', 'ext/ldap' => 'Extensions/Extldap', 'ext/libevent' => 'Extensions/Extlibevent', 'ext/libxml' => 'Extensions/Extlibxml', 'ext/mail' => 'Extensions/Extmail', 'ext/mailparse' => 'Extensions/Extmailparse', 'ext/math' => 'Extensions/Extmath', 'ext/mbstring' => 'Extensions/Extmbstring', 'ext/mcrypt' => 'Extensions/Extmcrypt', 'ext/memcache' => 'Extensions/Extmemcache', 'ext/memcached' => 'Extensions/Extmemcached', 'ext/ming' => 'Extensions/Extming', 'ext/mongo' => 'Extensions/Extmongo', 'ext/mssql' => 'Extensions/Extmssql', 'ext/mysql' => 'Extensions/Extmysql', 'ext/mysqli' => 'Extensions/Extmysqli', 'ext/ob' => 'Extensions/Extob', 'ext/oci8' => 'Extensions/Extoci8', 'ext/odbc' => 'Extensions/Extodbc', 'ext/opcache' => 'Extensions/Extopcache', 'ext/openssl' => 'Extensions/Extopenssl', 'ext/parsekit' => 'Extensions/Extparsekit', 'ext/pcntl' => 'Extensions/Extpcntl', 'ext/pcre' => 'Extensions/Extpcre', 'ext/pdo' => 'Extensions/Extpdo', 'ext/pgsql' => 'Extensions/Extpgsql', 'ext/phalcon' => 'Extensions/Extphalcon', 'ext/phar' => 'Extensions/Extphar', 'ext/posix' => 'Extensions/Extposix', 'ext/proctitle' => 'Extensions/Extproctitle', 'ext/pspell' => 'Extensions/Extpspell', 'ext/readline' => 'Extensions/Extreadline', 'ext/recode' => 'Extensions/Extrecode', 'ext/redis' => 'Extensions/Extredis', 'ext/reflexion' => 'Extensions/Extreflection', 'ext/runkit' => 'Extensions/Extrunkit', 'ext/sem' => 'Extensions/Extsem', 'ext/session' => 'Extensions/Extsession', 'ext/shmop' => 'Extensions/Extshmop', 'ext/simplexml' => 'Extensions/Extsimplexml', 'ext/snmp' => 'Extensions/Extsnmp', 'ext/soap' => 'Extensions/Extsoap', 'ext/sockets' => 'Extensions/Extsockets', 'ext/spl' => 'Extensions/Extspl', 'ext/sqlite' => 'Extensions/Extsqlite', 'ext/sqlite3' => 'Extensions/Extsqlite3', 'ext/sqlsrv' => 'Extensions/Extsqlsrv', 'ext/ssh2' => 'Extensions/Extssh2', 'ext/standard' => 'Extensions/Extstandard', 'ext/tidy' => 'Extensions/Exttidy', 'ext/tokenizer' => 'Extensions/Exttokenizer', 'ext/trader' => 'Extensions/Exttrader', 'ext/wddx' => 'Extensions/Extwddx', 'ext/wikidiff2' => 'Extensions/Extwikidiff2', 'ext/wincache' => 'Extensions/Extwincache', 'ext/xcache' => 'Extensions/Extxcache', 'ext/xdebug' => 'Extensions/Extxdebug', 'ext/xdiff' => 'Extensions/Extxdiff', 'ext/xhprof' => 'Extensions/Extxhprof', 'ext/xml' => 'Extensions/Extxml', 'ext/xmlreader' => 'Extensions/Extxmlreader', 'ext/xmlrpc' => 'Extensions/Extxmlrpc', 'ext/xmlwriter' => 'Extensions/Extxmlwriter', 'ext/xsl' => 'Extensions/Extxsl', 'ext/yaml' => 'Extensions/Extyaml', 'ext/yis' => 'Extensions/Extyis', 'ext/zip' => 'Extensions/Extzip', 'ext/zlib' => 'Extensions/Extzlib', 'ext/zmq' => 'Extensions/Extzmq'));
        // collecting information for Extensions
        $themed = Analyzer::getThemeAnalyzers('Appinfo');
        $res = $this->dump->query('SELECT analyzer, count FROM resultsCounts WHERE analyzer IN ("' . implode('", "', $themed) . '")');
        $sources = array();
        while ($row = $res->fetchArray(\SQLITE3_ASSOC)) {
            $sources[$row['analyzer']] = $row['count'];
        }
        $data = array();
        foreach ($extensions as $section => $hash) {
            $data[$section] = array();
            foreach ($hash as $name => $ext) {
                if (!isset($sources[$ext])) {
                    $data[$section][$name] = self::NOT_RUN;
                    continue;
                }
                if (!in_array($ext, $themed)) {
                    $data[$section][$name] = self::NOT_RUN;
                    continue;
                }
                // incompatible
                if ($sources[$ext] == Analyzer::CONFIGURATION_INCOMPATIBLE) {
                    $data[$section][$name] = self::INCOMPATIBLE;
                    continue;
                }
                if ($sources[$ext] == Analyzer::VERSION_INCOMPATIBLE) {
                    $data[$section][$name] = self::INCOMPATIBLE;
                    continue;
                }
                $data[$section][$name] = $sources[$ext] > 0 ? self::YES : self::NO;
            }
            if ($section == 'Extensions') {
                $list = $data[$section];
                uksort($data[$section], function ($ka, $kb) use($list) {
                    if ($list[$ka] == $list[$kb]) {
                        if ($ka > $kb) {
                            return 1;
                        }
                        if ($ka == $kb) {
                            return 0;
                        }
                        if ($ka > $kb) {
                            return -1;
                        }
                    } else {
                        return $list[$ka] == self::YES ? -1 : 1;
                    }
                });
            }
        }
        // collecting information for Composer
        if (isset($sources['Composer/PackagesNames'])) {
            $data['Composer Packages'] = array();
            $res = $this->dump->query('SELECT fullcode FROM results WHERE analyzer = "Composer/PackagesNames"');
            while ($row = $res->fetchArray(\SQLITE3_ASSOC)) {
                $data['Composer Packages'][] = $row['fullcode'];
            }
        } else {
            unset($data['Composer Packages']);
        }
        $return = $this->formatText(<<<TEXT
This is an overview of your application. 

<ul>
<li>Ticked <i class="fa fa-check"></i> information are features used in the application.</li>
<li>Non-ticked are feature that are not in use in the application.</li>
<li>Crossed <i class="fa fa-minus-circle"></i> features are not compatibile with the PHP version used, or its configuration. </li>
<li>Crossed <i class="fa fa-times-circle-o"></i> information were not tested.</li>
</ul>

TEXT
, 'textLead');
        $return .= $this->formatTree($data, $css);
        return $return;
    }