Don't delete voip_numbers (which was forgotten if the status
got set to terminated anyways), rather than free them by
undef'ing the subscriber_id and reseller_id.
Don't try to insert a number into billing.voip_numbers directly,
rather than using the update_subscriber_numbers helper, which
handles the re-using of free numbers.
If a sound set is contract default and you create another default one,
the old gets non-default.
Properly handle contract default setting also when editing sound sets.
And while at it, set np-display as outbound-from-display-name dom-pref
when creating a PBX domain.
If a new contract sound set is marked as contract_default, use this
for every existing subscriber in contract_sound_set prefs if no
other set is specified yet.
If a new subscriber is created and such a sound set exists, also
use this one.
This prevents having to go over each single subscriber to assign
the contract_sound_set preference.
On one hand, dont allow (peering,reseller)-contracts to
be created with a wrong contact (which has a reseller id).
On the other hand, dont preselect wrong contacts in the first
place (from created_objects)
When the reseller has a wrong contract assigned to
him, this contract is not shown because it has already
been filtered out in the Contract controller. In favor
of usability now show it anyway.
Also only present correct contracts on edit/create
resellers in the first place.
See (Mantis:3855#c25797)
Only show reseller and peering contracts in the
Contracts controller. Also remove the generic create
in favour of the peering/create and reseller/create.
Customer controller now has its own terminate routine to be really
independent from the Contract controller.
Now we can expose the Contract controller in the menu.
Move error_page to notfound_page. error_page is now for internal server errors.
Introduce logging option log_crash_state, enabled by default. Crash states are
written out compressed and encoded log-file-friendly, these are useful for
debugging but take a couple dozen kilobytes of disk space each.
Don't use JE for data validation, as it adds lots of processing overhead.
Properly use Formhandler for data validation.
Catch DB errors properly.
Write basic auth test.