Adding a new field
From ISPWiki
We need to add a new field into an existing form (user.edit). You need to describe this field in xml and write your handler, as ISPmanager will ignore all the fields with unknown names.
First, you describe a field for ISPmanager to know how it should be displayed in the interface. Create a etc/ispmgr_mod_myfield.xml file. For more information about these tags see the article XML (ISPmanager):
<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
<metadata name="user.edit">
<form>
<page name="basic">
<field name="myelement">
<input type="text" name="myelement"/>
</field>
</page>
</form>
</metadata>
<lang name="en">
<messages name="user.edit">
<msg name="myelement">Simple elem</msg>
<msg name="hint_myelement">Description for simple elem</msg>
</messages>
</lang>
</mgrdata>
To make ISPmanager know what to do with the value of this field, write your handler addon/myprogram.pl:
#!/usr/bin/perl
use CGI;
my $Q = new CGI;
open DATA, "<var/user.data";
my @rows = <DATA>;
close DATA;
my $user = $Q->param("elid");
$user = $Q->param("name") if (!$user);
if ($Q->param("func") eq "user.edit") {
if ($Q->param("sok")) {
open DATA, ">var/user.data";
foreach $row (@rows) {
my @elems = split / /, $row, 2;
printf DATA "%s", $row if ($elems[0] ne $user);
}
printf DATA "%s %s\n", $user, $Q->param("myelement");
close DATA;
} else {
foreach $row (@rows) {
my @elems = split / /, $row, 2;
if ($elems[0] eq $user) {
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc><myelement>$elems[1]</myelement></doc>\n";
exit(0);
}
}
}
} else {
open DATA, ">var/user.data";
foreach $row (@rows) {
my @elems = split / /, $row, 2;
printf DATA "%s", $row if ($elems[0] ne $user);
}
close DATA;
}
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<doc/>\n";
This handler records the content of the myelement field into the var/user.data file and returns the field value when editing. It also deletes the record form the file when deleting a user.
To make ISPmanager call our handler in the etc/ispmgr_mod_myfield.xml file created above, add the followings into <mgrdata>:
<handler name="myprogram.pl" type="cgi">
<event after="yes">user.edit</event>
<event after="yes">user.delete</event>
</handler>
Restart ISPmanager to see the newly created field.
Sometimes ISPmanager does not renew the xml cache when starting; in such a case the filed may not appear in the form. To update it manually, delete var/.xmlcache/ispmgr and restart ISPmanager.
