Konfiguration

Im Verzeichnis "config" erstellen Sie zunächst eine Datei mit der Endung .inc.php, z.B: myconf.inc.php. Sie können beliebig viele Dateien anlegen und entsprechend benennen.

Hinweis: Alle angegebenen Werte sind Default-Werte. Eine Änderung könnte die Systemstabilität beeinträchtigen.


<?php

define('FORMULA_DELAY', 50000); // Verzögerung pro Datensatz beim Berechnen der Formeln in Mikrosekunden
define('SYNC_DELAY', 50000);    // Sync-Delay für Push in Mikrosekunden
define('EGET_DELAY', 250000);   // Delay for Receiving Mails from POP3-Server

define('API_DEBUG', 0);         // 0 oder 1, schaltet den Debug-Modus der API ein bzw. aus
define('SOAP_DEBUG', 0);         // 0 oder 1, schaltet den Debug-Modus der SOAP-Schnittstelle ein bzw. aus
define('REST_DEBUG', 0);         // 0 oder 1, schaltet den Debug-Modus der REST-Schnittstelle ein bzw. aus

define('UPDATE_URL', 'https://crmsrv.tecart.de/release/crm_v43_55.tar.gz');
define('UPDATE_MD5', 'https://crmsrv.tecart.de/release/crm_v43_55.md5.txt');
define('UPDATE_VER', 'https://crmsrv.tecart.de/release/crm_v43_55.ver.txt');

define('MAX_EDIT_SITE', 8 * 1048576); // 8MB - maximale Größe Datei zum Bearbeiten im internen Editor

// Ab Version 3.7
define('ACTIVESYNC_SEARCH_PERSON', 'lastname, firstname'); // ActiveSync GAL-Search in Personenfeldern
define('ACTIVESYNC_SEARCH_CONTACT', 'company');            // ActiveSync GAL-Search in Kontaktfeldern    
define('ACTIVESYNC_SEARCH_ADD_COMPANY', 0);                // Hängt Firmenname an Nachnamen an

// Ab Version 3.8
if (!defined('DOC_POOLS')) define('DOC_POOLS', 'P1/Ordner 1,common/Ordner 2'); // Pfade zu Dokumenten-Pools mit auf diesen Pool begrenzter Suche

// Ab Version 4.2
if (!defined('CRM_PATH')) define('CRM_PATH', '/var/www/crm');  // Wird benötigt um das Autoupdate auszuführen auch wenn das System in einer temporären Ramdisk liegt
if (!defined('MAX_EDIT_SIZE_STARTER')) define ("MAX_EDIT_SIZE_STARTER", 10 * 1048576); // max. Dateigrösse für dirkete Bearbeitung über TecArt Starter in Byte (Standard: 10 MB)

// Ab Version 4.3
if (!defined('CRM_READ_ONLY')) define('CRM_READ_ONLY', 1); // Setzt das System in den Lesemodus, es erfolgen keine schreibenden Datenbankzugriffe mehr
if (!defined('DISABLE_REFERER_CHECK')) define('DISABLE_REFERER_CHECK', 0); // Sicherheitsprüfung des HTTP REFERERS unterbinden

// Ab Version 4.7
define('MAX_FILEUPLOAD_SIZE', 8 * 1048576); // Bsp.: 8MB - maximale Größe für Dateiupload (Standard: 25% des freien Speicherplatzes)
define('DISABLE_USER_SELECTION_IN_PROTOCOLS', 0) // Erlaubt es die Nutzerauswahl in den Protokollen zu verstecken

?>

Hinweis: <#VALUE#> kann verwendet werden, wenn in einem filterstring variable Daten vorkommen, bspw. Benutzer- oder Gruppen-Namen.


<?php

	$config['ldap_structure']	= array();
	
	// Config for groups
	$config['ldap_structure']['ldap_group_all'] = array(
			'filterstring'	=> '(&(objectclass=posixGroup)(cn=<#VALUE#>))', // Filter zum Abruf aller eingerichteten LDAP-Gruppen
			'attributes'	=> array("cn", "description"),                  // Attribute
			'descrfield'	=> 'description',                               // Beschreibungsfeld der LDAP-Gruppen
			'cnfield'	=> 'cn'                                         // LDAP-"cn"
	);
	$config['ldap_structure']['ldap_group_info'] = array(
			'filterstring'	=> '(&(objectclass=posixGroup)(name=<#VALUE#>))', // Filter zum Abruf der LDAP-Gruppen-Informationen
			'attributes'	=> array("memberuid","cn","description")          // Attribute
	);
	$config['ldap_structure']['ldap_group_members'] = array(
			'filterstring'	=> '(&(objectclass=person)(uid==<#VALUE#>))', // Filter zum Abruf der LDAP-Gruppen-Mitglieder
			'infofields'	=> array("memberuid","cn","description"),     // Attribute der Gruppen-Informationen
			'attributes'	=> array("uid", "objectClass"),               // Attribute der Gruppen-Mitglieder
			'uidfield'	=> 'uid',                                     // Feld für LDAP-Benutzername
			'muidfield'	=> 'memberuid'                                // Feld für LDAP-"memberuid"
	);

	// Config for users
	$config['ldap_structure']['ldap_users_all'] = array(
			'filterstring'	=> '(&(objectclass=person)(cn=<#VALUE#>))', // Filter zum Abruf der LDAP-Benutzer
			'attributes'	=> array("uid","displayname"),              // Attribute
			'dnfield'		=> 'displayname',                   // Feld für LDAP-"dn" bei Abruf der LDAP-Benutzer
			'uidfield'		=> 'uid'                            // Feld für LDAP-Benutzername bei Abruf der LDAP-Benutzer
	);
	$config['ldap_structure']['ldap_users_info'] = array(
			'filterstring'	=> '(&(objectclass=person)(uid=<#VALUE#>))',            // Filter zum Abruf der LDAP-Benutzer-Informationen
			'attributes'	=> array("uid","mail","displayname","telephonenumber"), // Attribute
			'uidfield'	=> 'uid',                                               // Feld für LDAP-Benutzername
			'memberoffield'	=> 'memberof'                                           // Feld LDAP-"memberof"
	);
	$config['ldap_structure']['ldap_users_groups'] = array(
			'filterstring'	=> '(&(cn=*)(memberUid=<#VALUE#>))', // Filter zum Abruf der Gruppen, in denen ein LDAP-Benutzer Mitglied ist
			'attributes'	=> array('dn')                       // Attribute
	);		
?>

Ab Version 4.2 können WebHooks verwendet werden. Mit diesen ist es möglich, dass Verhalten von bestimmten Schaltflächen mit JavaScript zu beeinflußen bzw. in den DAO-Klassen nach bestimmten Aktionen Webservices aufzurufen.


//JS-Hook
$config['webhooks']['contracts_articlelist_add_click'] = array(
		'script' => "window_open('..', '1500', '1000', 'auto', 'resizeable');",
		'stop' => true,
);

//DAO-Hook
$config['webhooks']['contact_after_save_new'] = array(
		'url'    => '...',
);

JS-Hooks bestehen aus einem Script-Teil im Feld script und der Anweisung, ob die Standard-Aktion des Buttons anschließend ausgeführt werden soll. Die Angabe stop ⇒ true bedeutet, dass nach der Ausführung des JS angehalten wird.

Platzhalter
<#theme#> Das aktuelle Theme
<#oid#>   Die ID des aktuellen Objektes

Für die DAO-Hooks kann nur die URL eines Webservices angegeben werden. Der Webservice muss ein json-kodiertes Array zurückgeben

  return array(
    'success' => true,  //Wenn erfolgreich, sonst false
    'stop'    => false, //Soll nach dem Hook-Aufruf die weitere Verarbeitung abgebrochen werden?
    'error'   => ''     //Wenn ein Fehler aufgetreten ist, kann eine Fehlermeldung transportiert werden
  );
Platzhalter
<#theme#>  Das aktuelle Theme
<#uid#>    Die ID des Benutzers
<#oid#>    Die ID des Objektes
<#sid#>    Die ID der Session

Vorhandene Hooks:

JS-Hooks:
offers_articlelist_add_click
offers_articlelist_open_click
offers_articlelist_del_click
contracts_articlelist_add_click
contracts_articlelist_open_click
contracts_articlelist_del_click
invoices_articlelist_add_click
invoices_articlelist_open_click
invoices_articlelist_del_click
offers_articlelist_add_article_click
articlelist_offers_open_click
articlelist_offers_del_click
offers_articlelist_add_article_click
articlelist_offers_open_click
articlelist_offers_del_click
offers_articlelist_add_article_click
articlelist_offers_open_click
articlelist_offers_open_click
orders_articlelist_add_click
orders_articlelist_open_click
orders_articlelist_del_click

DAO-Hooks:
contact_before_save
contact_after_save_existing
contact_after_save_new
contact_before_delete
offer_before_save
offer_after_save_existing
offer_after_save_new
offer_after_create_follow_up
offer_after_accepted
offer_after_lock
offer_after_unlock
offer_after_approve
offer_after_submit
offer_after_rejected
offer_after_replaced
offer_after_discarded
offer_before_delete
contract_before_save
contract_after_save_existing
contract_after_save_new
contract_after_lock
contract_after_unlock
contract_after_approve
contract_after_submit
contract_after_create_from_offer
contract_after_create_from_order
contract_after_merge_from_offer
contract_after_merge_from_order
contract_after_create_follow_up
contract_before_delete
invoice_before_save
invoice_after_save_existing
invoice_after_save_new
invoice_after_create_from_contract
invoice_after_lock
invoice_after_unlock
invoice_after_approve
invoice_after_book
invoice_after_duplicate
invoice_after_add_payment
invoice_after_reverse
invoice_before_delete
delivery_before_save
delivery_after_save_new
delivery_after_create_from_invoice
delivery_after_lock
delivery_after_unlock
delivery_after_approve
delivery_after_book
delivery_after_delivered
delivery_after_reverse
delivery_after_delete
admonition_before_save
admonition_after_save_existing
admonition_after_save_new
admonition_after_create_from_invoice
admonition_after_create_from_client_account
admonition_after_lock
admonition_after_unlock
admonition_after_approve
admonition_after_book
admonition_after_reverse
admonition_after_add_payment
admonition_after_delete
admonition_after_downgrade
admonition_after_escalate
admonition_after_irrecoverable
admonition_after_encash
voucher_before_save', $oid, $odata);
voucher_after_save_existing
voucher_after_save_new
voucher_after_create_from_invoice
voucher_after_lock
voucher_after_unlock
voucher_after_book
voucher_after_reverse
voucher_after_delete
voucher_after_add_payment
voucher_after_duplicate
order_before_save', $oid, $odata);
order_after_save_existing
order_after_save_new
order_after_lock
order_after_unlock
order_after_approve
order_after_submit
order_after_create_from_offer
order_after_merge_from_offer
order_after_create_follow_up
order_after_countermand
order_before_delete
ticket_before_close
ticket_after_save

Für die Hooks *_before_save werden die Daten aus dem Formular als base64- und json-kodierter Get-Parameter data an den Webservice übertragen.