Хук может быть и хороший, но реализация унылая. Нет алгоритмизации, в простонародье просто г-код.
Весь этот код
'info' => array(
0 => array(
'include' => $this->settings['csiIPS_contactInfo_row01_include'],
'member_group' => $this->settings['csiIPS_contactInfo_row01_userGroups'],
'username' => $this->settings['csiIPS_contactInfo_row01_username'],
'skype' => $this->settings['csiIPS_contactInfo_row01_skype'],
'note' => $this->settings['csiIPS_contactInfo_row01_note'],
'vk' => $this->settings['csiIPS_contactInfo_row01_vk'],
'fb' => $this->settings['csiIPS_contactInfo_row01_fb'],
),
1 => array(
'include' => $this->settings['csiIPS_contactInfo_row02_include'],
'member_group' => $this->settings['csiIPS_contactInfo_row02_userGroups'],
'username' => $this->settings['csiIPS_contactInfo_row02_username'],
'note' => $this->settings['csiIPS_contactInfo_row02_note'],
'skype' => $this->settings['csiIPS_contactInfo_row02_skype'],
'vk' => $this->settings['csiIPS_contactInfo_row02_vk'],
'fb' => $this->settings['csiIPS_contactInfo_row02_fb'],
),
2 => array(
'include' => $this->settings['csiIPS_contactInfo_row03_include'],
'member_group' => $this->settings['csiIPS_contactInfo_row03_userGroups'],
'username' => $this->settings['csiIPS_contactInfo_row03_username'],
'note' => $this->settings['csiIPS_contactInfo_row03_note'],
'skype' => $this->settings['csiIPS_contactInfo_row03_skype'],
'vk' => $this->settings['csiIPS_contactInfo_row03_vk'],
'fb' => $this->settings['csiIPS_contactInfo_row03_fb'],
),
3 => array(
'include' => $this->settings['csiIPS_contactInfo_row04_include'],
'member_group' => $this->settings['csiIPS_contactInfo_row04_userGroups'],
'username' => $this->settings['csiIPS_contactInfo_row04_username'],
'note' => $this->settings['csiIPS_contactInfo_row04_note'],
'skype' => $this->settings['csiIPS_contactInfo_row04_skype'],
'vk' => $this->settings['csiIPS_contactInfo_row04_vk'],
'fb' => $this->settings['csiIPS_contactInfo_row04_fb'],
),
4 => array(
'include' => $this->settings['csiIPS_contactInfo_row05_include'],
'member_group' => $this->settings['csiIPS_contactInfo_row05_userGroups'],
'username' => $this->settings['csiIPS_contactInfo_row05_username'],
'note' => $this->settings['csiIPS_contactInfo_row05_note'],
'skype' => $this->settings['csiIPS_contactInfo_row05_skype'],
'vk' => $this->settings['csiIPS_contactInfo_row05_vk'],
'fb' => $this->settings['csiIPS_contactInfo_row05_fb'],
),
),
);
if ($settings['member_group']) {$settings['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['member_group']));}
if ($settings['info'][0]['member_group']) {$settings['info'][0]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][0]['member_group']));}
if ($settings['info'][1]['member_group']) {$settings['info'][1]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][1]['member_group']));}
if ($settings['info'][2]['member_group']) {$settings['info'][2]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][2]['member_group']));}
if ($settings['info'][3]['member_group']) {$settings['info'][3]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][3]['member_group']));}
if ($settings['info'][4]['member_group']) {$settings['info'][4]['member_group'] = IPSMember::isInGroup($this->memberData, explode(',', $settings['info'][4]['member_group']));}
if ($settings['info'][0]['username']) {$settings['info'][0]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[0]['username'] . "']"));}
if ($settings['info'][1]['username']) {$settings['info'][1]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[1]['username'] . "']"));}
if ($settings['info'][2]['username']) {$settings['info'][2]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[2]['username'] . "']"));}
if ($settings['info'][3]['username']) {$settings['info'][3]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[3]['username'] . "']"));}
if ($settings['info'][4]['username']) {$settings['info'][4]['username'] = IPSText::getTextClass('bbcode')->preDisplayParse(IPSText::getTextClass('bbcode')->preDbParse("[4]['username'] . "']"));}
можно заменить одним этим
for( $i=0; $i<=4; $i++ )
{
$info = array(
'include' => $this->settings['csiIPS_contactInfo_row'.$i.'_include'],
'member_group' => $this->settings['csiIPS_contactInfo_row'.$i.'_userGroups'],
'username' => $this->settings['csiIPS_contactInfo_row'.$i.'_username'],
'note' => $this->settings['csiIPS_contactInfo_row'.$i.'_note'],
'skype' => $this->settings['csiIPS_contactInfo_row'.$i.'_skype'],
'vk' => $this->settings['csiIPS_contactInfo_row'.$i.'_vk'],
'fb' => $this->settings['csiIPS_contactInfo_row'.$i.'_fb'],
);
if( $info['member_group'] )
{
$info['member_group'] = IPSMember::isInGroup( $this->memberData, explode( ',', $info['member_group'] ) );
}
if( $info['username'] )
{
$info['username'] = IPSText::getTextClass('bbcode')->preDisplayParse( IPSText::getTextClass('bbcode')->preDbParse( "}']" ) );
}
$settings['info'][$i] = $info;
}
И опять эти повторяющиеся настройки для каждой отдельной сущности. По 7 настроек на 5 сущности это 35 лишних настроек в бд. Может быть не очень удобно, но можно создать одно поле textarea, и вписывать каждую сущность с новой строки в формате key=value&key-n=value-n. Поле с описанием настроек имеет тип text, можно туда всунуть js скрипт, который бы отформатировал этот формат в удобный для управления пользователем.