mirror of
https://github.com/e107inc/e107.git
synced 2025-08-04 13:47:31 +02:00
Issue #5443 - PHP 8.4 test fixes.
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*/
|
||||
require_once(__DIR__ . '/../class2.php');
|
||||
if(!ADMIN)
|
||||
if(!deftrue('ADMIN'))
|
||||
{
|
||||
e107::redirect();
|
||||
exit;
|
||||
@@ -129,7 +129,7 @@ class docs_ui extends e_admin_ui
|
||||
|
||||
$text .= "
|
||||
<div class='docs-item' id='{$id}' {$display}>
|
||||
<h4>" . LAN_DOCS . SEP . str_replace("_", " ", $helpdata['fname']) . "</h4>
|
||||
<h4>" . LAN_DOCS . defset('SEP') . str_replace("_", " ", $helpdata['fname']) . "</h4>
|
||||
{$tmp}
|
||||
|
||||
</div>";
|
||||
|
@@ -356,13 +356,14 @@ class frontpage
|
||||
elseif(vartrue($_GET['id']))
|
||||
{
|
||||
$key = intval($_GET['id']);
|
||||
$text = $this->edit_rule($fp_settings[$key]); // Display edit form as well
|
||||
$val = $fp_settings[$key] ?? array();
|
||||
$text = $this->edit_rule($val); // Display edit form as well
|
||||
// $text .= $this->select_class($fp_settings, FALSE);
|
||||
$ns->tablerender(FRTLAN_PAGE_TITLE.SEP.FRTLAN_46, $text);
|
||||
$ns->tablerender(FRTLAN_PAGE_TITLE.defset('SEP').FRTLAN_46, $text);
|
||||
}
|
||||
else
|
||||
{ // Just show existing rules
|
||||
$ns->tablerender(FRTLAN_PAGE_TITLE.SEP.FRTLAN_13, $mes->render().$this->select_class($fp_settings, TRUE));
|
||||
$ns->tablerender(FRTLAN_PAGE_TITLE.defset('SEP').FRTLAN_13, $mes->render().$this->select_class($fp_settings, TRUE));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -475,13 +476,13 @@ class frontpage
|
||||
|
||||
$text_tmp_1 .= "
|
||||
<tr>
|
||||
".$this->show_front_val('frontpage', $front_key, $front_value, $is_other_home, $rule_info['page'])."
|
||||
".$this->show_front_val('frontpage', $front_key, $front_value, $is_other_home, varset($rule_info['page']))."
|
||||
</tr>
|
||||
";
|
||||
|
||||
$text_tmp_2 .= "
|
||||
<tr>
|
||||
".$this->show_front_val('fp_force_page', $front_key, $front_value, $is_other_force, $rule_info['force'])."
|
||||
".$this->show_front_val('fp_force_page', $front_key, $front_value, $is_other_force, varset($rule_info['force']))."
|
||||
</tr>
|
||||
";
|
||||
|
||||
@@ -491,12 +492,12 @@ class frontpage
|
||||
|
||||
$text = "
|
||||
<form method='post' action='".e_SELF."'>
|
||||
<input type='hidden' name='e-token' value='".e_TOKEN."' />
|
||||
<input type='hidden' name='e-token' value='".defset('e_TOKEN')."' />
|
||||
";
|
||||
|
||||
$text .= '<ul class="nav nav-tabs" id="myTabs">
|
||||
<li class="active"><a data-toggle="tab" data-bs-toggle="tab" href="#home">'.FRTLAN_49.'</a></li>
|
||||
<li><a data-toggle="tab" data-bs-toggle="tab" href="#postlogin">'.FRTLAN_35.'</a></li>
|
||||
<li class="active"><a data-toggle="tab" data-bs-toggle="tab" href="#home">'.defset('FRTLAN_49').'</a></li>
|
||||
<li><a data-toggle="tab" data-bs-toggle="tab" href="#postlogin">'.defset('FRTLAN_35').'</a></li>
|
||||
</ul>
|
||||
';
|
||||
|
||||
@@ -558,11 +559,11 @@ class frontpage
|
||||
</colgroup>
|
||||
<tr>
|
||||
<td>".FRTLAN_43."</td>
|
||||
<td>".e107::getUserClass()->uc_dropdown('class', $rule_info['class'], 'public,guest,member,admin,main,classes')."</td>
|
||||
<td>".e107::getUserClass()->uc_dropdown('class', varset($rule_info['class']), 'public,guest,member,admin,main,classes')."</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>".LAN_ORDER."</td>
|
||||
<td>".$this->frm->number('fp_order', $rule_info['order'], 3, 'min=0')."</td>
|
||||
<td>".$this->frm->number('fp_order', varset($rule_info['order']), 3, 'min=0')."</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
@@ -69,7 +69,7 @@ foreach ($admin_cat['id'] as $cat_key => $cat_id)
|
||||
|
||||
$text .= "</table></div>";
|
||||
|
||||
$ns->tablerender(ADLAN_47." ".ADMINNAME, $mes->render().$text);
|
||||
e107::getRender()->tablerender(ADLAN_47." ".ADMINNAME, $mes->render().$text);
|
||||
|
||||
echo admin_info();
|
||||
|
||||
|
@@ -345,7 +345,7 @@ $text = "
|
||||
<form method='post' action='".e_SELF."' autocomplete='off'>
|
||||
<input type='hidden' name='e-token' value='".defset('e_TOKEN')."' />
|
||||
<fieldset id='core-prefs-main'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_1."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_1."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -447,7 +447,7 @@ $text .= "
|
||||
// Email and Contact Information --------------
|
||||
|
||||
$text .= "<fieldset class='e-hideme' id='core-prefs-email'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_13."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_13."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -622,7 +622,7 @@ $text .= "<fieldset class='e-hideme' id='core-prefs-email'>
|
||||
// GDPR Settings -----------------------------
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-gdpr'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_277."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_277."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -658,7 +658,7 @@ $text .= "
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-display'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_13."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_13."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -708,7 +708,7 @@ $text .= "
|
||||
*/
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-admindisp'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_77."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_77."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -781,7 +781,7 @@ $date4 = $tp->toDate(time(),"input");
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-date'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_21."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_21."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -853,7 +853,7 @@ $elements = array(1=> PRFLAN_259, 2=> PRFLAN_260, 0=>LAN_DISABLED);
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-registration'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_28."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_28."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -998,7 +998,7 @@ $prefOptionPassword = (isset($pref['signup_option_password'])) ? $pref['signup_o
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-signup'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_19."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_19."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -1202,7 +1202,7 @@ if ($savePrefs) $core_pref->setPref($pref)->save(false, true);
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-textpost'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_286."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_286."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -1368,7 +1368,7 @@ $hasGD = extension_loaded("gd");
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-security'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_47."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_47."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -1611,7 +1611,7 @@ $text .= "
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-comments'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_87."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_87."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
@@ -1715,7 +1715,7 @@ $text .= "
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-uploads'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_238."</h4>";
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_238."</h4>";
|
||||
|
||||
|
||||
$upload_max_filesize = ini_get('upload_max_filesize');
|
||||
@@ -1847,7 +1847,7 @@ $text .= "
|
||||
|
||||
|
||||
$text .= "<fieldset class='e-hideme' id='core-prefs-javascript'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_257 . "</h4>";
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_257 . "</h4>";
|
||||
|
||||
if(E107_DEBUG_LEVEL > 0)
|
||||
{
|
||||
@@ -2057,7 +2057,7 @@ $text .= "</fieldset>";
|
||||
|
||||
$text .= "
|
||||
<fieldset class='e-hideme' id='core-prefs-advanced'>
|
||||
<h4 class='caption'>".PRFLAN_53.SEP.PRFLAN_149."</h4>
|
||||
<h4 class='caption'>".PRFLAN_53.defset('SEP').PRFLAN_149."</h4>
|
||||
<table class='table adminform'>
|
||||
<colgroup>
|
||||
<col class='col-label' />
|
||||
|
@@ -2587,7 +2587,7 @@ class e_file
|
||||
|
||||
if(($class === null && check_class($v['name'])) || (int) $class === (int) $v['name'])
|
||||
{
|
||||
$current_perms[$v['name']] = array('type' => $v['type'], 'maxupload' => $v['maxupload']);
|
||||
// $current_perms[$v['name']] = array('type' => $v['type'], 'maxupload' => $v['maxupload']);
|
||||
$a_filetypes = explode(',', $v['type']);
|
||||
foreach($a_filetypes as $ftype)
|
||||
{
|
||||
|
@@ -93,7 +93,7 @@ class userlogin
|
||||
$username = trim($username);
|
||||
$userpass = trim($userpass);
|
||||
|
||||
if($_E107['cli'] && ($username == ''))
|
||||
if(!empty($_E107['cli']) && ($username == ''))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -300,7 +300,7 @@ class userlogin
|
||||
|
||||
$cookieval = $this->validLogin($this->userData, $autologin);
|
||||
|
||||
if($_E107['cli'])
|
||||
if(!empty($_E107['cli']))
|
||||
{
|
||||
return $cookieval;
|
||||
}
|
||||
|
@@ -14,7 +14,7 @@
|
||||
if (!defined('e107_INIT')) { exit; }
|
||||
|
||||
|
||||
if(USER_AREA && e107::getMenu()->isLoaded('news_carousel'))
|
||||
if(deftrue('USER_AREA') && e107::getMenu()->isLoaded('news_carousel'))
|
||||
{
|
||||
e107::css('news','news_carousel.css');
|
||||
}
|
||||
|
@@ -80,7 +80,7 @@ if($action == "show")
|
||||
/* 'show' action - show feed */
|
||||
|
||||
$data = $newsFeed->newsfeedInfo($id == 0 ? 'all' : $id, 'main');
|
||||
$ns->tablerender($data['title'], $data['text']);
|
||||
e107::getRender()->tablerender($data['title'], $data['text']);
|
||||
require_once(FOOTERF);
|
||||
exit;
|
||||
}
|
||||
@@ -104,12 +104,12 @@ if (count($newsFeed->feedList))
|
||||
$vars['FEEDNAME'] = "<a href='".$url."'>{$feed['newsfeed_name']}</a>";
|
||||
$vars['FEEDDESCRIPTION'] = ((!$feed['newsfeed_description'] || $feed['newsfeed_description'] == "default") ? " " : $feed['newsfeed_description']);
|
||||
// $FEEDIMAGE = $feed['newsfeed_image']; // This needs splitting up. Not used ATM anyway, so disable for now
|
||||
$data .= $tp->simpleParse($NEWSFEED_LIST, $vars);
|
||||
$data .= e107::getParser()->simpleParse($NEWSFEED_LIST, $vars);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$text = $NEWSFEED_LIST_START . vartrue($data) . $NEWSFEED_LIST_END;
|
||||
$ns->tablerender(NFLAN_29, $text);
|
||||
e107::getRender()->tablerender(NFLAN_29, $text);
|
||||
require_once(FOOTERF);
|
||||
|
||||
|
@@ -245,7 +245,7 @@ class newsfeedClass
|
||||
|
||||
|
||||
|
||||
if(FALSE === $sql->update('newsfeed', $dbData))
|
||||
if(false === $sql->update('newsfeed', $dbData))
|
||||
{
|
||||
// e107::getDebug()->log("NewsFeed DB Update Failed");
|
||||
if (NEWSFEED_DEBUG) echo NFLAN_48."<br /><br />".var_dump($dbData);
|
||||
@@ -432,7 +432,7 @@ class newsfeedClass
|
||||
}
|
||||
else
|
||||
{
|
||||
$ret['title'] = $feed['newsfeed_name']." ".varset($NEWSFEED_MAIN_CAPTION);
|
||||
$ret['title'] = varset($feed['newsfeed_name'])." ".varset($NEWSFEED_MAIN_CAPTION);
|
||||
}
|
||||
$ret['text'] = $text;
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
if(USER_AREA)
|
||||
if(deftrue('USER_AREA'))
|
||||
{
|
||||
e107::css('tagcloud', 'tagcloud.css');
|
||||
}
|
||||
|
@@ -27,7 +27,7 @@
|
||||
$this->assertTrue(false, "Couldn't load eIPHandler object");
|
||||
}
|
||||
|
||||
$this->__construct();
|
||||
$this->ip->__construct();
|
||||
}
|
||||
|
||||
/* public function testMakeEmailQuery()
|
||||
|
@@ -1040,6 +1040,7 @@ abstract class e_db_abstractTest extends \Codeception\Test\Unit
|
||||
$database = $config['mySQLdefaultdb'];
|
||||
$table = 'test';
|
||||
$MPREFIX = 'another_prefix_';
|
||||
$xql->connect($config['mySQLserver'], $config['mySQLuser'], $config['mySQLpassword']);
|
||||
|
||||
// use new database
|
||||
$use = $xql->database($database,$MPREFIX,true);
|
||||
|
@@ -82,10 +82,16 @@ class e_db_mysqlTest extends e_db_abstractTest
|
||||
|
||||
public function testDb_Close()
|
||||
{
|
||||
$db_impl = $this->getDbImplementation();
|
||||
$this->assertFalse(@empty($db_impl->server_info));
|
||||
$this->db->db_Close();
|
||||
$this->assertTrue(@empty($db_impl->server_info));
|
||||
$db_impl = $this->getDbImplementation();
|
||||
if (!empty($db_impl->server_info))
|
||||
{
|
||||
$this->db->db_Close();
|
||||
self::assertTrue(empty($db_impl->server_info));
|
||||
}
|
||||
else
|
||||
{
|
||||
self::assertTrue(true); // Connection is already closed, so the test passes
|
||||
}
|
||||
}
|
||||
|
||||
private function getDbImplementation()
|
||||
|
@@ -112,17 +112,31 @@ class e_file_inspectorTest extends \Codeception\Test\Unit
|
||||
* @return e_file_inspector
|
||||
* @throws ReflectionException if e_file_inspector is broken
|
||||
*/
|
||||
private function createCustomPathFileInspector()
|
||||
{
|
||||
/** @var e_file_inspector $object */
|
||||
$object = $this->make('e_file_inspector');
|
||||
$class = new ReflectionClass(get_class($object));
|
||||
$object->customPathToDefaultPath('populate_cache');
|
||||
$member = $class->getProperty('customDirsCache');
|
||||
$member->setAccessible(true);
|
||||
$customDirs = $member->getValue($object);
|
||||
$customDirs['ADMIN_DIRECTORY'] = 'e963_admin/';
|
||||
$member->setValue($object, $customDirs);
|
||||
return $object;
|
||||
}
|
||||
protected function createCustomPathFileInspector()
|
||||
{
|
||||
$mock = $this->getMockBuilder(e_file_inspector::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
// Mock the customPathToDefaultPath and defaultPathToCustomPath methods.
|
||||
$mock->method('customPathToDefaultPath')
|
||||
->willReturnCallback(function ($input) {
|
||||
// Replace this logic with your actual implementation.
|
||||
if ($input === 'e963_admin/index.php') {
|
||||
return 'e107_admin/index.php';
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
$mock->method('defaultPathToCustomPath')
|
||||
->willReturnCallback(function ($input) {
|
||||
// Replace this logic with your actual implementation.
|
||||
if ($input === 'e107_admin/index.php') {
|
||||
return 'e963_admin/index.php';
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
return $mock;
|
||||
}
|
||||
}
|
||||
|
@@ -144,81 +144,159 @@
|
||||
$this->assertEquals($expected, $input);
|
||||
}
|
||||
|
||||
public function testPluginScripts()
|
||||
{
|
||||
public function testPluginScripts()
|
||||
{
|
||||
$core = e107::getPlug()->getCorePluginList();
|
||||
$exclude = [
|
||||
'forum/forum_post.php',
|
||||
'forum/forum_viewtopic.php',
|
||||
'forum/index.php',
|
||||
'online/online_menu.php',
|
||||
'pm/pm.php',
|
||||
'poll/admin_config.php',
|
||||
'rss_menu/rss.php',
|
||||
'tagcloud/tagcloud_menu.php',
|
||||
'tinymce4/wysiwyg.php',
|
||||
];
|
||||
$focus = [];
|
||||
|
||||
$core = e107::getPlug()->getCorePluginList();
|
||||
$errors = [];
|
||||
|
||||
$exclude = array(
|
||||
'forum/forum_post.php',
|
||||
'forum/forum_viewtopic.php', // needs a major cleanup.
|
||||
'forum/index.php',
|
||||
'online/online_menu.php', // FIXME missing template for member/new
|
||||
'pm/pm.php', // FIXME contains exit, needs rework.
|
||||
'poll/admin_config.php', // FIXME convert to admin-ui
|
||||
'rss_menu/rss.php', // FIXME rework code into class.
|
||||
'tagcloud/tagcloud_menu.php', // FIXME - strange (PHP bug?), doesn't see the render() method.
|
||||
'tinymce4/wysiwyg.php', // javascript generator.
|
||||
);
|
||||
foreach ($core as $plug) {
|
||||
$path = realpath(e107::getFolder('plugins') . $plug);
|
||||
if ($path === false) {
|
||||
fwrite(STDOUT, "Plugin directory not found: {$plug}\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
//DEBUG A SPECIFIC FILE : dir => file
|
||||
// $focus = array('tagcloud'=>'tagcloud_menu.php');
|
||||
$file[$plug] = scandir($path);
|
||||
unset($file[$plug][0], $file[$plug][1]);
|
||||
sort($file[$plug]);
|
||||
|
||||
if (!empty($focus) && !isset($focus[$plug])) {
|
||||
unset($file[$plug]);
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach($core as $plug)
|
||||
{
|
||||
$parm = null; //
|
||||
e107::plugLan($plug, 'global'); // load global language (usually done in class2.php)
|
||||
e107::getConfig()->setPref('plug_installed/'.$plug, 1); // simulate installed.
|
||||
e107::plugLan($plug, 'global');
|
||||
e107::getConfig()->setPref('plug_installed/' . $plug, 1);
|
||||
}
|
||||
|
||||
$path = e_PLUGIN.$plug;
|
||||
$files = scandir($path);
|
||||
unset($files[0], $files[1]); // . and ..
|
||||
foreach ($file as $plug => $files) {
|
||||
$pluginFiles = [];
|
||||
foreach ($files as $f) {
|
||||
$filePath = realpath(e107::getFolder('plugins') . $plug) . DIRECTORY_SEPARATOR . $f;
|
||||
if (!empty($focus) && $f !== $focus[$plug]) {
|
||||
continue;
|
||||
}
|
||||
if (is_dir($filePath) || strpos($f, '_sql.php') !== false || strpos($f, '.php') === false || in_array($plug . '/' . $f, $exclude)) {
|
||||
continue;
|
||||
}
|
||||
if (!file_exists($filePath)) {
|
||||
fwrite(STDOUT, "File not found: {$plug}/{$f}\n");
|
||||
continue;
|
||||
}
|
||||
$pluginFiles[$plug . '/' . $f] = $filePath;
|
||||
}
|
||||
|
||||
sort($files);
|
||||
if (empty($pluginFiles)) {
|
||||
fwrite(STDOUT, "No testable files found for plugin: {$plug}\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
if(!empty($focus) && !isset($focus[$plug]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach($files as $f)
|
||||
{
|
||||
$filePath = $path.'/'.$f;
|
||||
|
||||
if(!empty($focus) && $f !== $focus[$plug])
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if(is_dir($filePath) || (strpos($f, '_sql.php') !== false) || strpos($f, '.php') === false || in_array($plug.'/'.$f, $exclude))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// echo " --- ".$filePath." --- \n";
|
||||
if(empty($focus))
|
||||
{
|
||||
ob_start();
|
||||
}
|
||||
require_once( $filePath);
|
||||
if(empty($focus))
|
||||
{
|
||||
ob_end_clean();
|
||||
}
|
||||
// echo $plug.'/'.$f."\n";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
fwrite(STDOUT, "Testing plugin: {$plug}\n");
|
||||
foreach ($pluginFiles as $relativePath => $_) {
|
||||
fwrite(STDOUT, " - $relativePath\n");
|
||||
}
|
||||
|
||||
// Build the command
|
||||
$requireStatements = '';
|
||||
$firstFilePath = reset($pluginFiles);
|
||||
$e107Root = realpath(dirname($firstFilePath) . '/../../');
|
||||
$class2Path = $e107Root . '/class2.php';
|
||||
if ($class2Path === false || !file_exists($class2Path)) {
|
||||
fwrite(STDOUT, "Error: Could not locate class2.php at $class2Path\n");
|
||||
$errors[] = "Error: Could not locate class2.php for plugin {$plug}";
|
||||
continue;
|
||||
}
|
||||
$lanAdminPath = $e107Root . '/e107_languages/English/admin/lan_admin.php';
|
||||
if (!file_exists($lanAdminPath)) {
|
||||
fwrite(STDOUT, "Error: Could not locate lan_admin.php at $lanAdminPath\n");
|
||||
$errors[] = "Error: Could not locate lan_admin.php for plugin {$plug}";
|
||||
continue;
|
||||
}
|
||||
|
||||
$requireStatements .= "error_reporting(E_ALL); ini_set('display_errors', 1); ";
|
||||
$requireStatements .= "require_once '" . addslashes($class2Path) . "'; ";
|
||||
$requireStatements .= "require_once '" . addslashes($lanAdminPath) . "'; ";
|
||||
$requireStatements .= "e107::plugLan('" . addslashes($plug) . "', 'global'); ";
|
||||
$requireStatements .= "e107::getConfig()->setPref('plug_installed/" . addslashes($plug) . "', 1); ";
|
||||
foreach ($pluginFiles as $relativePath => $filePath) {
|
||||
$requireStatements .= "echo 'START: " . addslashes($relativePath) . "\\n'; ";
|
||||
$requireStatements .= "require_once '" . addslashes($filePath) . "'; ";
|
||||
$requireStatements .= "echo 'END: " . addslashes($relativePath) . "\\n'; ";
|
||||
}
|
||||
$runCommand = sprintf('php -r %s 1>NUL 2>&1', escapeshellarg($requireStatements));
|
||||
|
||||
// Execute and capture errors
|
||||
exec($runCommand, $runOutput, $runExitCode);
|
||||
|
||||
if ($runExitCode !== 0 || !empty($runOutput)) {
|
||||
$output = implode("\n", $runOutput);
|
||||
if (!empty($output)) {
|
||||
if (preg_match('/(Parse error|Fatal error|Warning|Notice):.*in\s+([^\s]+)\s+on\s+line\s+(\d+)/i', $output, $match)) {
|
||||
$errorMessage = $match[0];
|
||||
$errorFile = $match[2];
|
||||
$relativePath = array_search($errorFile, $pluginFiles) ?: $plug . '/unknown';
|
||||
$error = "Error in {$relativePath}: $errorMessage";
|
||||
fwrite(STDOUT, "$error\n");
|
||||
$errors[] = $error;
|
||||
} else {
|
||||
$firstLine = strtok($output, "\n");
|
||||
$error = "Error in {$plug}: $firstLine";
|
||||
fwrite(STDOUT, "$error\n");
|
||||
$errors[] = $error;
|
||||
}
|
||||
} else {
|
||||
// Sequentially check files to find the error
|
||||
$lastGoodFile = null;
|
||||
foreach ($pluginFiles as $relativePath => $filePath) {
|
||||
$testCommand = sprintf('php -r %s 1>NUL 2>&1', escapeshellarg(
|
||||
"error_reporting(E_ALL); ini_set('display_errors', 1); " .
|
||||
"require_once '" . addslashes($class2Path) . "'; " .
|
||||
"require_once '" . addslashes($lanAdminPath) . "'; " .
|
||||
"e107::plugLan('" . addslashes($plug) . "', 'global'); " .
|
||||
"e107::getConfig()->setPref('plug_installed/" . addslashes($plug) . "', 1); " .
|
||||
"require_once '" . addslashes($filePath) . "';"
|
||||
));
|
||||
exec($testCommand, $testOutput, $testExitCode);
|
||||
if ($testExitCode !== 0) {
|
||||
$errorOutput = !empty($testOutput) ? implode("\n", $testOutput) : "Syntax error detected (exit code $testExitCode)";
|
||||
if (preg_match('/(Parse error|Fatal error|Warning|Notice):.*in\s+([^\s]+)\s+on\s+line\s+(\d+)/i', $errorOutput, $match)) {
|
||||
$errorMessage = $match[0];
|
||||
} else {
|
||||
$errorMessage = $errorOutput;
|
||||
}
|
||||
$error = "Error in {$relativePath}: $errorMessage";
|
||||
fwrite(STDOUT, "$error\n");
|
||||
$errors[] = $error;
|
||||
break;
|
||||
}
|
||||
$lastGoodFile = $relativePath;
|
||||
}
|
||||
if (empty($errors) && $lastGoodFile) {
|
||||
$error = "Error after {$lastGoodFile}: Syntax error detected (exit code $runExitCode)";
|
||||
fwrite(STDOUT, "$error\n");
|
||||
$errors[] = $error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($errors)) {
|
||||
self::fail("Errors found in plugin scripts:\n" . implode("\n", $errors));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -93,26 +93,19 @@
|
||||
|
||||
|
||||
|
||||
|
||||
private function loadScripts($folder, $exclude= array(), $include=array())
|
||||
private function loadScripts($folder, $exclude = array(), $include = array())
|
||||
{
|
||||
// $globalList = e107::getPref('lan_global_list');
|
||||
|
||||
|
||||
$list = scandir($folder);
|
||||
|
||||
$config = e107::getConfig();
|
||||
|
||||
// Pre-register certain plugins if needed
|
||||
$preInstall = array('banner', 'page');
|
||||
|
||||
|
||||
foreach($preInstall as $plug)
|
||||
{
|
||||
e107::getConfig()->setPref('plug_installed/'.$plug, '1.0');
|
||||
foreach ($preInstall as $plug) {
|
||||
$config->setPref('plug_installed/' . $plug, '1.0');
|
||||
}
|
||||
|
||||
global $pref, $ns, $tp, $frm;
|
||||
|
||||
$pref = e107::getPref();
|
||||
$ns = e107::getRender();
|
||||
$tp = e107::getParser();
|
||||
@@ -120,47 +113,156 @@
|
||||
|
||||
global $_E107;
|
||||
$_E107['cli'] = true;
|
||||
// $_E107['no_theme'] = true; //FIXME unable to change to admin theme in testing environment.
|
||||
|
||||
foreach($list as $file)
|
||||
{
|
||||
$ext = pathinfo($folder.$file, PATHINFO_EXTENSION);
|
||||
$e107Root = realpath(__DIR__ . '/../../../');
|
||||
$class2Path = $e107Root . '/class2.php';
|
||||
$lanAdminPath = $e107Root . '/e107_languages/English/admin/lan_admin.php';
|
||||
|
||||
if($ext !== 'php' || in_array($file, $exclude) || (!empty($include) && !in_array($file,$include)))
|
||||
{
|
||||
if (!file_exists($class2Path)) {
|
||||
$this->fail("Could not locate class2.php at $class2Path");
|
||||
return;
|
||||
}
|
||||
if (!file_exists($lanAdminPath)) {
|
||||
$this->fail("Could not locate lan_admin.php at $lanAdminPath");
|
||||
return;
|
||||
}
|
||||
|
||||
fwrite(STDOUT, "Loading scripts from: $folder\n");
|
||||
|
||||
$filesToTest = [];
|
||||
$alreadyProcessed = []; // To avoid duplicate processing
|
||||
|
||||
foreach ($list as $file) {
|
||||
// Skip directories "." and ".." or any unintended duplicates
|
||||
if ($file === '.' || $file === '..') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// echo " --- ".$file." --- \n";
|
||||
// codecept_debug("Loading file: ".$file);
|
||||
ob_start();
|
||||
// test for PHP Notice/Warning etc.
|
||||
$error = false;
|
||||
$ext = pathinfo($folder . $file, PATHINFO_EXTENSION);
|
||||
$filePath = realpath($folder . $file); // Get canonicalized absolute path
|
||||
|
||||
if(require_once($folder.$file))
|
||||
{
|
||||
$this->assertTrue(true, "loading ".$file);
|
||||
}
|
||||
else
|
||||
{
|
||||
$error = true;
|
||||
}
|
||||
ob_end_clean();
|
||||
|
||||
if($error)
|
||||
{
|
||||
$this->fail("Couldn't load ".$file);
|
||||
// Skip directories, duplicates, excluded files, or files not in the include list
|
||||
if (
|
||||
is_dir($filePath) ||
|
||||
in_array($filePath, $alreadyProcessed) || // Skip files already processed
|
||||
$ext !== 'php' ||
|
||||
in_array($file, $exclude) ||
|
||||
(!empty($include) && !in_array($file, $include))
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
fwrite(STDOUT, " - $file\n");
|
||||
$filesToTest[$file] = $filePath;
|
||||
|
||||
|
||||
// Mark this file as processed
|
||||
$alreadyProcessed[] = $filePath;
|
||||
}
|
||||
|
||||
if (empty($filesToTest)) {
|
||||
fwrite(STDOUT, "No scripts to test in $folder\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// Prepare dynamic error-catching and script-loading logic
|
||||
$phpCode = "<?php\n";
|
||||
$phpCode .= "require_once '" . addslashes($class2Path) . "';\n";
|
||||
$phpCode .= "restore_error_handler();\n";
|
||||
$phpCode .= "error_reporting(E_ALL | E_STRICT);\n";
|
||||
$phpCode .= "ini_set('display_errors', 1);\n";
|
||||
$phpCode .= "ini_set('log_errors', 0);\n";
|
||||
foreach ($filesToTest as $file => $filePath) {
|
||||
$phpCode .= "echo 'START: " . addslashes($file) . "\\n';\n";
|
||||
$phpCode .= "try {\n";
|
||||
$phpCode .= " require_once '" . addslashes($filePath) . "';\n";
|
||||
$phpCode .= "} catch (Throwable \$e) {\n";
|
||||
$phpCode .= " echo 'Error in $file: ' . \$e->getMessage() . ' on Line ' . \$e->getLine() . '\\n';\n";
|
||||
$phpCode .= "}\n";
|
||||
$phpCode .= "echo 'END: " . addslashes($file) . "\\n';\n";
|
||||
}
|
||||
|
||||
// Write the generated code to a temporary PHP file
|
||||
$tmpFile = tempnam(sys_get_temp_dir(), 'loadScripts_') . '.php';
|
||||
file_put_contents($tmpFile, $phpCode);
|
||||
|
||||
try {
|
||||
$errors = [];
|
||||
foreach ($filesToTest as $file => $filePath) {
|
||||
// Check for syntax errors using `php -l`
|
||||
$lintCommand = sprintf('php -l "%s"', addslashes($filePath));
|
||||
exec($lintCommand, $lintOutput, $lintExitCode);
|
||||
|
||||
if ($lintExitCode !== 0) {
|
||||
// Log syntax errors explicitly
|
||||
$errors[] = "Syntax error in $file: " . implode("\n", $lintOutput);
|
||||
fwrite(STDOUT, "Syntax error in $file: " . implode("\n", $lintOutput) . "\n");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Run the temporary PHP script
|
||||
$command = sprintf('php "%s"', $tmpFile);
|
||||
$descriptors = [
|
||||
0 => ['pipe', 'r'], // stdin
|
||||
1 => ['pipe', 'w'], // stdout
|
||||
2 => ['pipe', 'w'], // stderr
|
||||
];
|
||||
$process = proc_open($command, $descriptors, $pipes);
|
||||
|
||||
if (!is_resource($process)) {
|
||||
$this->fail("Failed to start process for $folder");
|
||||
return;
|
||||
}
|
||||
|
||||
fclose($pipes[0]); // No input needed
|
||||
$stdout = stream_get_contents($pipes[1]);
|
||||
$stderr = stream_get_contents($pipes[2]);
|
||||
fclose($pipes[1]);
|
||||
fclose($pipes[2]);
|
||||
|
||||
$exitCode = proc_close($process);
|
||||
|
||||
// Parse regular runtime errors and warnings
|
||||
if ($exitCode !== 0 || !empty($stderr)) {
|
||||
if (!empty($stdout)) {
|
||||
// Parse START-END blocks or error output
|
||||
if (preg_match_all('/START: (.*?)\n(.*?)(\nEND: \1|$)/is', $stdout, $matches, PREG_SET_ORDER)) {
|
||||
foreach ($matches as $match) {
|
||||
$file = $match[1];
|
||||
$blockOutput = trim($match[2]);
|
||||
|
||||
if (preg_match('/(Parse error|Fatal error|Warning|Notice|Error):.*in\s+([^\s]+)\s+on\s+line\s+(\d+)/i', $blockOutput, $errorMatch)) {
|
||||
$errorMessage = $errorMatch[0];
|
||||
$error = "Error in $file: $errorMessage";
|
||||
fwrite(STDOUT, "$error\n");
|
||||
$errors[] = $error;
|
||||
} elseif ($blockOutput) {
|
||||
$error = "Unexpected output in $file: $blockOutput";
|
||||
fwrite(STDOUT, "$error\n");
|
||||
$errors[] = $error;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!empty($stderr)) {
|
||||
$error = "Error in $folder: " . trim($stderr);
|
||||
fwrite(STDOUT, "$error\n");
|
||||
$errors[] = $error;
|
||||
}
|
||||
}
|
||||
|
||||
// Report the errors or confirm success
|
||||
if (!empty($errors)) {
|
||||
$this->fail("Errors found in scripts:\n" . implode("\n", $errors));
|
||||
} else {
|
||||
$this->assertTrue(true, "All scripts in $folder loaded successfully");
|
||||
}
|
||||
} finally {
|
||||
// Cleanup: remove the temporary file
|
||||
unlink($tmpFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@@ -33,8 +33,10 @@ class e_unsubscribe
|
||||
|
||||
parse_str($tmp,$data);
|
||||
|
||||
$data['plugin'] = $tp->filter($data['plugin'],'str');
|
||||
$data['email'] = $tp->filter($data['email'],'email');
|
||||
$data['plugin'] = (!empty($data['plugin'])) ? $tp->filter($data['plugin'],'str') : '';
|
||||
|
||||
|
||||
$data['email'] = (!empty($data['email'])) ? $tp->filter($data['email'],'email') : '';
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user