1
0
mirror of https://github.com/e107inc/e107.git synced 2025-08-03 21:27:25 +02:00

More User Extended Tests.

This commit is contained in:
Cameron
2021-01-10 18:07:05 -08:00
parent 33b76590df
commit d4df39bc75
7 changed files with 272 additions and 48 deletions

View File

@@ -351,6 +351,10 @@ class usersettings_shortcodes extends e_shortcode
$tp = e107::getParser(); $tp = e107::getParser();
$frm = e107::getForm(); $frm = e107::getForm();
if(empty($this->var['userclass_list']) && ADMIN)
{
return '$this->var[\'userclass_list\'] is empty';
}
$qry = " $qry = "
SELECT * FROM #user_extended_struct SELECT * FROM #user_extended_struct
@@ -393,8 +397,6 @@ class usersettings_shortcodes extends e_shortcode
} }
} }
if(($parm == 'tabs') && !empty($tabs) && deftrue('BOOTSTRAP')) if(($parm == 'tabs') && !empty($tabs) && deftrue('BOOTSTRAP'))
{ {
return e107::getForm()->tabs($tabs); return e107::getForm()->tabs($tabs);
@@ -445,6 +447,7 @@ class usersettings_shortcodes extends e_shortcode
} }
} }
if($catInfo) if($catInfo)
{ {
$qry = " $qry = "
@@ -462,9 +465,7 @@ class usersettings_shortcodes extends e_shortcode
foreach($fieldList as $field) foreach($fieldList as $field)
{ {
e107::setRegistry("extendedfield_{$field['user_extended_struct_name']}", $field); e107::setRegistry("extendedfield_{$field['user_extended_struct_name']}", $field);
//TODO use $this instead of parseTemplate();
$ret .= $this->sc_userextended_field($field['user_extended_struct_name']); $ret .= $this->sc_userextended_field($field['user_extended_struct_name']);
// $ret .= $tp->parseTemplate("{USEREXTENDED_FIELD={$field['user_extended_struct_name']}}", TRUE, $usersettings_shortcodes);
} }
} }
} }
@@ -484,6 +485,28 @@ class usersettings_shortcodes extends e_shortcode
return $ret; return $ret;
} }
public function getUserExtendedFieldData($name)
{
$tp = e107::getParser();
$sql = e107::getDb();
$fInfo = array();
$qry = "
SELECT * FROM #user_extended_struct
WHERE user_extended_struct_applicable IN (" . $tp->toDB($this->var['userclass_list'], true) . ")
AND user_extended_struct_write IN (" . USERCLASS_LIST . ")
AND user_extended_struct_name = '" . $tp->toDB($name, true) . "'
";
if($sql->gen($qry))
{
$fInfo = $sql->fetch();
}
return $fInfo;
}
function sc_userextended_field($parm = null) function sc_userextended_field($parm = null)
{ {
@@ -522,16 +545,7 @@ class usersettings_shortcodes extends e_shortcode
if(!$fInfo) if(!$fInfo)
{ {
$qry = " $fInfo = $this->getUserExtendedFieldData($parm);
SELECT * FROM #user_extended_struct
WHERE user_extended_struct_applicable IN (" . $tp->toDB($this->var['userclass_list'], true) . ")
AND user_extended_struct_write IN (" . USERCLASS_LIST . ")
AND user_extended_struct_name = '" . $tp->toDB($parm, true) . "'
";
if($sql->gen($qry))
{
$fInfo = $sql->fetch();
}
} }
if($fInfo) if($fInfo)
@@ -572,6 +586,8 @@ class usersettings_shortcodes extends e_shortcode
$rVal = !empty($fInfo['user_extended_struct_required']) ; $rVal = !empty($fInfo['user_extended_struct_required']) ;
$ret = $USEREXTENDED_FIELD; $ret = $USEREXTENDED_FIELD;
$ret = str_replace("{FIELDNAME}", $fname, $ret); $ret = str_replace("{FIELDNAME}", $fname, $ret);
$ret = str_replace("{FIELDVAL}", $fval, $ret); $ret = str_replace("{FIELDVAL}", $fval, $ret);

View File

@@ -155,6 +155,9 @@ class e107_user_extended
else else
{ // Its a field definition { // Its a field definition
$id = 'user_' . $row['user_extended_struct_name']; $id = 'user_' . $row['user_extended_struct_name'];
$row['user_extended_struct_parent'] = (int) $row['user_extended_struct_parent'];
$this->fieldDefinitions[$row['user_extended_struct_id']] = $row; $this->fieldDefinitions[$row['user_extended_struct_id']] = $row;
@@ -575,18 +578,14 @@ class e107_user_extended
// Get the definition of all fields, or those in a specific category, grouped by category ID // Get the definition of all fields, or those in a specific category, grouped by category ID
// Reads non-system fields only // Reads non-system fields only
function user_extended_get_fields($cat = "") public function user_extended_get_fields($cat = "")
{ {
$sql = e107::getDb('ue'); $list = $this->getFieldList($cat);
$ret = array(); $ret = array();
$more = ($cat) ? " AND user_extended_struct_parent = ".intval($cat)." " : ""; foreach($list as $row)
if($sql->select("user_extended_struct", "*", "user_extended_struct_type > 0 AND user_extended_struct_text != '_system_' {$more} ORDER BY user_extended_struct_order ASC"))
{
while($row = $sql->fetch())
{ {
$ret[$row['user_extended_struct_parent']][] = $row; $ret[$row['user_extended_struct_parent']][] = $row;
} }
}
return $ret; return $ret;
} }
@@ -647,6 +646,27 @@ class e107_user_extended
$indexField = 'user_extended_struct_id'; $indexField = 'user_extended_struct_id';
} }
$ret = [];
foreach($this->fieldDefinitions as $row)
{
if(!empty($cat) && ($row['user_extended_struct_parent'] !== (int) $cat))
{
continue;
}
if($system == false && ($row['user_extended_struct_text'] === '_system_'))
{
continue;
}
$id = $row[$indexField];
$ret[$id] = $row;
}
return $ret;
/*
$sql = e107::getDb('ue'); $sql = e107::getDb('ue');
$ret = array(); $ret = array();
@@ -662,7 +682,7 @@ class e107_user_extended
} }
} }
return $ret; return $ret;*/
} }
@@ -674,19 +694,15 @@ class e107_user_extended
{ {
$ret = array(); $ret = array();
$sql = e107::getDb('ue'); foreach($this->fieldDefinitions as $row)
if($sql->select("user_extended_struct", "*", "user_extended_struct_type > 0 ORDER BY user_extended_struct_order ASC"))
{
while($row = $sql->fetch())
{ {
$ret[] = 'user_'.$row['user_extended_struct_name']; $ret[] = 'user_'.$row['user_extended_struct_name'];
}
}
return $ret;
} }
return $ret;
}
/** /**
* Get the field-type of a given field-name. * Get the field-type of a given field-name.

View File

@@ -871,6 +871,7 @@ class e107Test extends \Codeception\Test\Unit
e_PLUGIN_ABS . 'forum/forum_viewtopic.php?f=post&id=123', e_PLUGIN_ABS . 'forum/forum_viewtopic.php?f=post&id=123',
$url, "Generated href does not match expectation" $url, "Generated href does not match expectation"
); );
e107::getDb()->truncate('user_extended_struct');// reset.
} }
public function testUrlOptionQueryUrlEncoded() public function testUrlOptionQueryUrlEncoded()
@@ -888,6 +889,7 @@ class e107Test extends \Codeception\Test\Unit
'forum/post/?didn%27t=%3Ctag%20attr%3D%22such%20wow%22%3E%3C/tag%3E&did=much%20doge', 'forum/post/?didn%27t=%3Ctag%20attr%3D%22such%20wow%22%3E%3C/tag%3E&did=much%20doge',
$url, "Generated href query string did not have expected URL encoding" $url, "Generated href query string did not have expected URL encoding"
); );
e107::getDb()->truncate('user_extended_struct');// reset.
} }
public function testUrlEscapesHtmlSpecialChars() public function testUrlEscapesHtmlSpecialChars()
@@ -904,6 +906,7 @@ class e107Test extends \Codeception\Test\Unit
'forum/<>/#Arts & Crafts <tag attr="can't inject here"></tag>', 'forum/<>/#Arts & Crafts <tag attr="can't inject here"></tag>',
$url, "Generated href did not prevent HTML tag injection as expected" $url, "Generated href did not prevent HTML tag injection as expected"
); );
e107::getDb()->truncate('user_extended_struct');// reset.
} }
/* /*
public function testRedirect() public function testRedirect()

View File

@@ -18,6 +18,7 @@
/** @var e107_user_extended */ /** @var e107_user_extended */
protected $ue; protected $ue;
protected function _before() protected function _before()
{ {
@@ -85,6 +86,15 @@
); );
$this->structParent = array(
'list' => 16,
'radio' => 16,
'textarea' => 16,
'country' => 17,
);
// Add a field of each type. // Add a field of each type.
foreach($this->structTypes as $k=> $v) foreach($this->structTypes as $k=> $v)
@@ -98,6 +108,7 @@
'parms' => null, 'parms' => null,
'values' => (isset($this->structValues[$k])) ? $this->structValues[$k] : null, 'values' => (isset($this->structValues[$k])) ? $this->structValues[$k] : null,
'default' => (isset($this->structDefault[$k])) ? $this->structDefault[$k] : null, 'default' => (isset($this->structDefault[$k])) ? $this->structDefault[$k] : null,
'parent' => (isset($this->structParent[$k])) ? $this->structParent[$k] : 0,
); );
$this->ue->user_extended_add($insert); $this->ue->user_extended_add($insert);
@@ -148,12 +159,8 @@
); );
$this->ue->init(); $this->ue->init();
} }
public function testSetGet() public function testSetGet()
@@ -274,6 +281,50 @@
} }
public function testUserExtendedAllShortcode()
{
$sc = e107::getScBatch('usersettings');
$sc->setVars(array('userclass_list' => '253,251,0,254,250'));
$result = e107::getParser()->parseTemplate('{USEREXTENDED_ALL}', false, $sc);
$this->assertStringContainsString('<h3>Category Name</h3>',$result);
$this->assertStringContainsString('<h3>Category Name 2</h3>',$result);
$this->assertStringContainsString('<h3>Miscellaneous</h3>', $result);
}
public function testGetUserExtendedFieldData()
{
$sc = e107::getScBatch('usersettings');
$sc->setVars(array('userclass_list' => '253,251,0,254,250'));
$expected = array (
'user_extended_struct_id' => '3',
'user_extended_struct_name' => 'radio',
'user_extended_struct_text' => 'Radio',
'user_extended_struct_type' => '2',
'user_extended_struct_parms' => '',
'user_extended_struct_values' => 'M =&gt; UE_LAN_MALE,F =&gt; UE_LAN_FEMALE',
'user_extended_struct_default' => 'F',
'user_extended_struct_read' => '0',
'user_extended_struct_write' => '0',
'user_extended_struct_required' => '0',
'user_extended_struct_signup' => '0',
'user_extended_struct_applicable' => '0',
'user_extended_struct_order' => '2',
'user_extended_struct_parent' => '16',
);
$result = $sc->getUserExtendedFieldData('radio');
$this->assertEquals($result, $expected);
}
public function testGetStructure() public function testGetStructure()
{ {
e107::setRegistry('core/userextended/structure'); // clear the registry. e107::setRegistry('core/userextended/structure'); // clear the registry.
@@ -505,12 +556,32 @@
{ {
} }
*/
public function testGetFieldNames() public function testGetFieldNames()
{ {
$expected = array (
0 => 'user_text',
1 => 'user_homepage',
2 => 'user_radio',
3 => 'user_dropdown',
4 => 'user_dbfield',
5 => 'user_textarea',
6 => 'user_integer',
7 => 'user_date',
8 => 'user_language',
9 => 'user_list',
10 => 'user_checkbox',
11 => 'user_predefined',
12 => 'user_addon',
13 => 'user_country',
14 => 'user_richtextarea',
);
$result = $this->ue->getFieldNames();
$this->assertSame($expected, $result);
} }
/*
public function testUser_extended_modify() public function testUser_extended_modify()
{ {
@@ -615,12 +686,72 @@
{ {
} }
*/
public function testUser_extended_get_fields() public function testUser_extended_get_fields()
{ {
$expected = array (
16 =>
array (
0 =>
array (
'user_extended_struct_id' => '3',
'user_extended_struct_name' => 'radio',
'user_extended_struct_text' => 'Radio',
'user_extended_struct_type' => '2',
'user_extended_struct_parms' => '',
'user_extended_struct_values' => 'M =&gt; UE_LAN_MALE,F =&gt; UE_LAN_FEMALE',
'user_extended_struct_default' => 'F',
'user_extended_struct_read' => '0',
'user_extended_struct_write' => '0',
'user_extended_struct_required' => '0',
'user_extended_struct_signup' => '0',
'user_extended_struct_applicable' => '0',
'user_extended_struct_order' => '2',
'user_extended_struct_parent' => '16',
),
1 =>
array (
'user_extended_struct_id' => '6',
'user_extended_struct_name' => 'textarea',
'user_extended_struct_text' => 'Textarea',
'user_extended_struct_type' => '5',
'user_extended_struct_parms' => '',
'user_extended_struct_values' => '',
'user_extended_struct_default' => '',
'user_extended_struct_read' => '0',
'user_extended_struct_write' => '0',
'user_extended_struct_required' => '0',
'user_extended_struct_signup' => '0',
'user_extended_struct_applicable' => '0',
'user_extended_struct_order' => '5',
'user_extended_struct_parent' => '16',
),
2 =>
array (
'user_extended_struct_id' => '10',
'user_extended_struct_name' => 'list',
'user_extended_struct_text' => 'List',
'user_extended_struct_type' => '9',
'user_extended_struct_parms' => '',
'user_extended_struct_values' => 'timezones',
'user_extended_struct_default' => '',
'user_extended_struct_read' => '0',
'user_extended_struct_write' => '0',
'user_extended_struct_required' => '0',
'user_extended_struct_signup' => '0',
'user_extended_struct_applicable' => '0',
'user_extended_struct_order' => '9',
'user_extended_struct_parent' => '16',
),
),
);
$result = $this->ue->user_extended_get_fields(16);
$this->assertEquals($expected, $result);
} }
/*
public function testUser_extended_type_text() public function testUser_extended_type_text()
{ {
@@ -722,12 +853,67 @@
{ {
} }
*/
public function testUser_extended_get_fieldList() public function testUser_extended_get_fieldList()
{ {
$expected = array (
'radio' =>
array (
'user_extended_struct_id' => '3',
'user_extended_struct_name' => 'radio',
'user_extended_struct_text' => 'Radio',
'user_extended_struct_type' => '2',
'user_extended_struct_parms' => '',
'user_extended_struct_values' => 'M =&gt; UE_LAN_MALE,F =&gt; UE_LAN_FEMALE',
'user_extended_struct_default' => 'F',
'user_extended_struct_read' => '0',
'user_extended_struct_write' => '0',
'user_extended_struct_required' => '0',
'user_extended_struct_signup' => '0',
'user_extended_struct_applicable' => '0',
'user_extended_struct_order' => '2',
'user_extended_struct_parent' => 16,
),
'textarea' =>
array (
'user_extended_struct_id' => '6',
'user_extended_struct_name' => 'textarea',
'user_extended_struct_text' => 'Textarea',
'user_extended_struct_type' => '5',
'user_extended_struct_parms' => '',
'user_extended_struct_values' => '',
'user_extended_struct_default' => '',
'user_extended_struct_read' => '0',
'user_extended_struct_write' => '0',
'user_extended_struct_required' => '0',
'user_extended_struct_signup' => '0',
'user_extended_struct_applicable' => '0',
'user_extended_struct_order' => '5',
'user_extended_struct_parent' => 16,
),
'list' =>
array (
'user_extended_struct_id' => '10',
'user_extended_struct_name' => 'list',
'user_extended_struct_text' => 'List',
'user_extended_struct_type' => '9',
'user_extended_struct_parms' => '',
'user_extended_struct_values' => 'timezones',
'user_extended_struct_default' => '',
'user_extended_struct_read' => '0',
'user_extended_struct_write' => '0',
'user_extended_struct_required' => '0',
'user_extended_struct_signup' => '0',
'user_extended_struct_applicable' => '0',
'user_extended_struct_order' => '9',
'user_extended_struct_parent' => 16,
),
);
$result = $this->ue->user_extended_get_fieldList(16, 'user_extended_struct_name');
$this->assertSame($expected, $result);
} }
*/

View File

@@ -663,7 +663,8 @@ class e_parse_shortcodeTest extends \Codeception\Test\Unit
$sc->__construct(); $sc->__construct();
$sc->setVars($vars); $sc->setVars($vars);
$exclude = array('sc_userextended_all'); // uses e107::setRegistry() to avoid duplicate rendering. // these are tested in the user-extended test.
$exclude = array('sc_userextended_all', 'sc_userextended_cat', 'sc_userextended_field'); // uses e107::setRegistry() to avoid duplicate rendering.
$this->processShortcodeMethods($sc, $exclude); $this->processShortcodeMethods($sc, $exclude);
} }

View File

@@ -252,6 +252,7 @@
$this->assertNotEmpty($result['plugin_path'], "plugin_path was empty" ); $this->assertNotEmpty($result['plugin_path'], "plugin_path was empty" );
$this->assertEmpty($result['plugin_installflag'], "plugin_installflag was true when it should be false"); $this->assertEmpty($result['plugin_installflag'], "plugin_installflag was true when it should be false");
e107::getDb()->truncate('user_extended_struct');// reset.
} }
/* /*
public function testGetAdminCaption() public function testGetAdminCaption()

View File

@@ -180,6 +180,7 @@
{ {
$this->pluginInstall('forum'); $this->pluginInstall('forum');
$this->pluginUninstall('forum'); $this->pluginUninstall('forum');
e107::getDb()->truncate('user_extended_struct'); // clear the table
} }
public function testGallery() public function testGallery()