jedchecker/administrator/components/com_jedchecker/libraries/rules/gpl.php

150 lines
3.0 KiB
PHP
Raw Normal View History

2013-04-11 13:23:19 +00:00
<?php
/**
2019-03-09 19:44:14 +00:00
* @package Joomla.JEDChecker
*
2019-03-10 16:09:42 +00:00
* @copyright Copyright (C) 2017 - 2019 Open Source Matters, Inc. All rights reserved.
* Copyright (C) 2008 - 2016 compojoom.com . All rights reserved.
2019-03-10 08:49:52 +00:00
* @author Daniel Dimitrov <daniel@compojoom.com>
*
2019-03-09 19:44:14 +00:00
* @license GNU General Public License version 2 or later; see LICENSE.txt
2013-04-11 13:23:19 +00:00
*/
defined('_JEXEC') or die('Restricted access');
// Include the rule base class
require_once(JPATH_COMPONENT_ADMINISTRATOR . '/models/rule.php');
/**
2013-11-05 20:17:39 +00:00
* class JedcheckerRulesGpl
*
2013-04-11 13:23:19 +00:00
* This class searches all files for the _JEXEC check
* which prevents direct file access.
*
2013-11-05 20:17:39 +00:00
* @since 1.0
2013-04-11 13:23:19 +00:00
*/
2013-11-05 20:17:39 +00:00
class JedcheckerRulesGpl extends JEDcheckerRule
2013-04-11 13:23:19 +00:00
{
/**
* The formal ID of this rule. For example: SE1.
*
* @var string
*/
protected $id = 'PH1';
/**
* The title or caption of this rule.
*
* @var string
*/
protected $title = 'COM_JEDCHECKER_RULE_PH1';
/**
* The description of this rule.
*
* @var string
*/
protected $description = 'COM_JEDCHECKER_RULE_PH1_DESC';
/**
* Initiates the file search and check
*
* @return void
*/
public function check()
{
// Find all php files of the extension
$files = JFolder::files($this->basedir, '.php$', true, true);
// Iterate through all files
foreach ($files as $file)
{
// Try to find the _JEXEC check in the file
if (!$this->find($file))
{
// Add as error to the report if it was not found
$this->report->addError($file, JText::_('COM_JEDCHECKER_ERROR_GPL_NOT_FOUND'));
}
}
}
/**
* Reads a file and searches for the _JEXEC statement
*
2013-11-05 20:17:39 +00:00
* @param string $file - The path to the file
2013-04-11 13:23:19 +00:00
*
2013-11-05 20:17:39 +00:00
* @return boolean True if the statement was found, otherwise False.
2013-04-11 13:23:19 +00:00
*/
protected function find($file)
{
$content = (array) file($file);
2013-11-05 20:17:39 +00:00
2013-04-11 13:23:19 +00:00
// Get the constants to look for
$licenses = $this->params->get('constants');
$licenses = explode(',', $licenses);
$hascode = 0;
2013-04-11 13:23:19 +00:00
foreach ($content AS $key => $line)
{
$tline = trim($line);
if ($tline == '' || $tline == '<?php' || $tline == '?>')
{
continue;
}
if ($tline['0'] != '/' && $tline['0'] != '*')
{
$hascode = 1;
}
2013-04-11 13:23:19 +00:00
// Search for GPL license
$gpl = stripos($line, 'GPL');
$gnu = stripos($line, 'GNU');
$gpl_long = stripos($line, 'general public license');
if ($gpl || $gnu || $gpl_long)
{
2013-11-05 20:17:39 +00:00
$this->report->addInfo(
$file,
JText::_('COM_JEDCHECKER_PH1_LICENSE_FOUND') . ':' . '<strong>' . $line . '</strong>',
$key
);
2013-04-11 13:23:19 +00:00
return true;
}
// Search for the constant name
foreach ($licenses AS $license)
{
$license = trim($license);
// Search for the license
$found = strpos($line, $license);
2013-11-05 20:17:39 +00:00
2013-04-11 13:23:19 +00:00
// Skip the line if the license is not found
if ($found === false)
{
continue;
}
else
{
2013-11-05 20:17:39 +00:00
$this->report->addInfo(
$file,
JText::_('COM_JEDCHECKER_GPL_COMPATIBLE_LICENSE_WAS_FOUND') . ':' . '<strong>' . $line . '</strong>',
$key
);
2013-04-11 13:23:19 +00:00
return true;
}
}
}
unset($content);
return $hascode ? false : true;
2013-04-11 13:23:19 +00:00
}
}