--- /tmp/dsg/dolibarr/htdocs/zapier/github_19.0.3_hook_agenda.php
+++ /tmp/dsg/dolibarr/htdocs/zapier/client_hook_agenda.php
@@ -0,0 +1,249 @@
+<?php

+/* Copyright (C) 2017 Laurent Destailleur  <eldy@users.sourceforge.net>

+ * Copyright (C) ---Put here your own copyright and developer email---

+ *

+ * This program is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 3 of the License, or

+ * (at your option) any later version.

+ *

+ * This program is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ *

+ * You should have received a copy of the GNU General Public License

+ * along with this program. If not, see <http://www.gnu.org/licenses/>.

+ */

+

+/**

+ *  \file       htdocs/zapier/hook_agenda.php

+ *  \ingroup    mymodule

+ *  \brief      Page of MyObject events

+ */

+

+// Load Dolibarr environment

+require '../main.inc.php';

+require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';

+require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';

+require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';

+dol_include_once('/mymodule/class/myobject.class.php');

+dol_include_once('/mymodule/lib/mymodule_myobject.lib.php');

+

+

+// Load translation files required by the page

+$langs->loadLangs(array("mymodule@mymodule", "other"));

+

+// Get parameters

+$id = GETPOST('id', 'int');

+$ref        = GETPOST('ref', 'alpha');

+$action = GETPOST('action', 'alpha');

+$cancel     = GETPOST('cancel', 'aZ09');

+$backtopage = GETPOST('backtopage', 'alpha');

+

+if (GETPOST('actioncode', 'array'))

+{

+    $actioncode = GETPOST('actioncode', 'array', 3);

+    if (!count($actioncode)) $actioncode = '0';

+}

+else

+{

+    $actioncode = GETPOST("actioncode", "alpha", 3) ?GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : (empty($conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT) ? '' : $conf->global->AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT));

+}

+$search_agenda_label = GETPOST('search_agenda_label');

+

+// Security check - Protection if external user

+//if ($user->socid > 0) accessforbidden();

+//if ($user->socid > 0) $socid = $user->socid;

+//$result = restrictedArea($user, 'mymodule', $id);

+

+$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;

+$sortfield = GETPOST("sortfield", 'alpha');

+$sortorder = GETPOST("sortorder", 'alpha');

+$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');

+if (empty($page) || $page == -1) { $page = 0; }     // If $page is not defined, or '' or -1

+$offset = $limit * $page;

+$pageprev = $page - 1;

+$pagenext = $page + 1;

+if (!$sortfield) $sortfield = 'a.datep,a.id';

+if (!$sortorder) $sortorder = 'DESC';

+

+// Initialize technical objects

+$object = new MyObject($db);

+$extrafields = new ExtraFields($db);

+$diroutputmassaction = $conf->mymodule->dir_output.'/temp/massgeneration/'.$user->id;

+$hookmanager->initHooks(array('myobjectagenda', 'globalcard')); // Note that conf->hooks_modules contains array

+

+// Fetch optionals attributes and labels

+$extrafields->fetch_name_optionals_label($object->table_element);

+

+// Load object

+include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once  // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals

+if ($id > 0 || !empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$object->entity]."/".$object->id;

+

+

+

+/*

+ *	Actions

+ */

+

+$parameters = array('id'=>$socid);

+$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks

+if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');

+

+if (empty($reshook))

+{

+    // Cancel

+    if (GETPOST('cancel', 'alpha') && !empty($backtopage))

+    {

+        header("Location: ".$backtopage);

+        exit;

+    }

+

+    // Purge search criteria

+    if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) // All tests are required to be compatible with all browsers

+    {

+        $actioncode = '';

+        $search_agenda_label = '';

+    }

+}

+

+

+

+/*

+ *	View

+ */

+

+$contactstatic = new Contact($db);

+

+$form = new Form($db);

+

+if ($object->id > 0)

+{

+	$title = $langs->trans("Agenda");

+	//if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title;

+	$help_url = '';

+	llxHeader('', $title, $help_url);

+

+	if (!empty($conf->notification->enabled)) $langs->load("mails");

+	$head = myobjectPrepareHead($object);

+

+

+	dol_fiche_head($head, 'agenda', $langs->trans("MyObject"), -1, 'myobject@mymodule');

+

+	// Object card

+	// ------------------------------------------------------------

+	$linkback = '<a href="'.dol_buildpath('/mymodule/myobject_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';

+

+	$morehtmlref = '<div class="refidno">';

+	/*

+	 // Ref customer

+	 $morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);

+	 $morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);

+	 // Thirdparty

+	 $morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1);

+	 // Project

+	 if (! empty($conf->projet->enabled))

+	 {

+	 $langs->load("projects");

+	 $morehtmlref.='<br>'.$langs->trans('Project') . ' ';

+	 if ($user->rights->mymodule->creer)

+	 {

+	 if ($action != 'classify')

+	 	//$morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';

+	 	$morehtmlref.=' : ';

+	 	if ($action == 'classify') {

+	 	//$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);

+	 	$morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';

+	 	$morehtmlref.='<input type="hidden" name="action" value="classin">';

+	 	$morehtmlref.='<input type="hidden" name="token" value="'.newToken().'">';

+	 	$morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);

+	 	$morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';

+	 	$morehtmlref.='</form>';

+	 	} else {

+	 	$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);

+	 	}

+	 	} else {

+	 	if (! empty($object->fk_project)) {

+	 	$proj = new Project($db);

+	 	$proj->fetch($object->fk_project);

+	 	$morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';

+	 	$morehtmlref.=$proj->ref;

+	 	$morehtmlref.='</a>';

+	 	} else {

+	 	$morehtmlref.='';

+	 	}

+	 	}

+	 	}*/

+	$morehtmlref .= '</div>';

+

+

+	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);

+

+    print '<div class="fichecenter">';

+    print '<div class="underbanner clearboth"></div>';

+

+    $object->info($object->id);

+	dol_print_object_info($object, 1);

+

+	print '</div>';

+

+	dol_fiche_end();

+

+

+

+	// Actions buttons

+

+    $objthirdparty = $object;

+    $objcon = new stdClass();

+

+    $out = '';

+    $permok = $user->rights->agenda->myactions->create;

+    if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok)

+    {

+        //$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';

+        if (get_class($objthirdparty) == 'Societe') $out .= '&amp;socid='.$objthirdparty->id;

+        $out .= (!empty($objcon->id) ? '&amp;contactid='.$objcon->id : '').'&amp;backtopage=1&amp;percentage=-1';

+    	//$out.=$langs->trans("AddAnAction").' ';

+    	//$out.=img_picto($langs->trans("AddAnAction"),'filenew');

+    	//$out.="</a>";

+	}

+

+

+	print '<div class="tabsAction">';

+

+    if (!empty($conf->agenda->enabled))

+    {

+    	if (!empty($user->rights->agenda->myactions->create) || !empty($user->rights->agenda->allactions->create))

+    	{

+        	print '<a class="butAction" href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out.'">'.$langs->trans("AddAction").'</a>';

+    	}

+    	else

+    	{

+        	print '<a class="butActionRefused classfortooltip" href="#">'.$langs->trans("AddAction").'</a>';

+    	}

+    }

+

+    print '</div>';

+

+    if (!empty($conf->agenda->enabled) && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read)))

+    {

+        $param = '&socid='.$socid;

+        if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.$contextpage;

+        if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.$limit;

+

+

+		print load_fiche_titre($langs->trans("ActionsOnMyObject"), '', '');

+

+        // List of all actions

+		$filters = array();

+        $filters['search_agenda_label'] = $search_agenda_label;

+

+        // TODO Replace this with same code than into list.php

+        //show_actions_done($conf,$langs,$db,$object,null,0,$actioncode, '', $filters, $sortfield, $sortorder);

+    }

+}

+

+// End of page

+llxFooter();

+$db->close();

--- /tmp/dsg/dolibarr/htdocs/zapier/github_19.0.3_hook_card.php
+++ /tmp/dsg/dolibarr/htdocs/zapier/client_hook_card.php
@@ -0,0 +1,437 @@
+<?php

+/* Copyright (C) 2017 Laurent Destailleur  <eldy@users.sourceforge.net>

+ * Copyright (C) ---Put here your own copyright and developer email---

+ *

+ * This program is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 3 of the License, or

+ * (at your option) any later version.

+ *

+ * This program is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ *

+ * You should have received a copy of the GNU General Public License

+ * along with this program. If not, see <http://www.gnu.org/licenses/>.

+ */

+

+/**

+ *   	\file       htdocs/zapier/myobject_card.php

+ *		\ingroup    mymodule

+ *		\brief      Page to create/edit/view myobject

+ */

+

+// Load Dolibarr environment

+require '../main.inc.php';

+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';

+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';

+dol_include_once('/mymodule/class/myobject.class.php');

+dol_include_once('/mymodule/lib/mymodule_myobject.lib.php');

+

+// Load translation files required by the page

+$langs->loadLangs(array("mymodule@mymodule", "other"));

+

+// Get parameters

+$id = GETPOST('id', 'int');

+$ref        = GETPOST('ref', 'alpha');

+$action = GETPOST('action', 'aZ09');

+$confirm    = GETPOST('confirm', 'alpha');

+$cancel     = GETPOST('cancel', 'aZ09');

+$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'myobjectcard'; // To manage different context of search

+$backtopage = GETPOST('backtopage', 'alpha');

+

+// Initialize technical objects

+$object = new MyObject($db);

+$extrafields = new ExtraFields($db);

+$diroutputmassaction = $conf->mymodule->dir_output.'/temp/massgeneration/'.$user->id;

+$hookmanager->initHooks(array('myobjectcard', 'globalcard')); // Note that conf->hooks_modules contains array

+

+// Fetch optionals attributes and labels

+$extrafields->fetch_name_optionals_label($object->table_element);

+

+$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');

+

+// Initialize array of search criterias

+$search_all = trim(GETPOST("search_all", 'alpha'));

+$search = array();

+foreach ($object->fields as $key => $val)

+{

+	if (GETPOST('search_'.$key, 'alpha')) $search[$key] = GETPOST('search_'.$key, 'alpha');

+}

+

+if (empty($action) && empty($id) && empty($ref)) $action = 'view';

+

+// Load object

+include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once  // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals

+

+// Security check - Protection if external user

+//if ($user->socid > 0) accessforbidden();

+//if ($user->socid > 0) $socid = $user->socid;

+//$isdraft = (($object->statut == MyObject::STATUS_DRAFT) ? 1 : 0);

+//$result = restrictedArea($user, 'mymodule', $object->id, '', '', 'fk_soc', 'rowid', $isdraft);

+

+

+/*

+ * Actions

+ *

+ * Put here all code to do according to value of "action" parameter

+ */

+

+$parameters = array();

+$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks

+if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');

+

+if (empty($reshook))

+{

+    $error = 0;

+

+    $permissiontoadd = $user->rights->mymodule->write;

+    $permissiontodelete = $user->rights->mymodule->delete || ($permissiontoadd && $object->status == 0);

+    $backurlforlist = dol_buildpath('/mymodule/myobject_list.php', 1);

+    if (empty($backtopage)) {

+        if (empty($id)) $backtopage = $backurlforlist;

+        else $backtopage = dol_buildpath('/mymodule/myobject_card.php', 1).($id > 0 ? $id : '__ID__');

+    }

+    $triggermodname = 'MYMODULE_MYOBJECT_MODIFY'; // Name of trigger action code to execute when we modify record

+

+    // Actions cancel, add, update, delete or clone

+    include DOL_DOCUMENT_ROOT.'/core/actions_addupdatedelete.inc.php';

+

+    // Actions when linking object each other

+    include DOL_DOCUMENT_ROOT.'/core/actions_dellink.inc.php';

+

+    // Actions when printing a doc from card

+    include DOL_DOCUMENT_ROOT.'/core/actions_printing.inc.php';

+

+    // Actions to send emails

+    $triggersendname = 'MYOBJECT_SENTBYMAIL';

+    $autocopy = 'MAIN_MAIL_AUTOCOPY_MYOBJECT_TO';

+    $trackid = 'myobject'.$object->id;

+    include DOL_DOCUMENT_ROOT.'/core/actions_sendmails.inc.php';

+}

+

+

+

+

+/*

+ * View

+ *

+ * Put here all code to build page

+ */

+

+$form = new Form($db);

+$formfile = new FormFile($db);

+

+llxHeader('', 'MyObject', '');

+

+// Example : Adding jquery code

+print '<script type="text/javascript" language="javascript">

+jQuery(document).ready(function() {

+	function init_myfunc()

+	{

+		jQuery("#myid").removeAttr(\'disabled\');

+		jQuery("#myid").attr(\'disabled\',\'disabled\');

+	}

+	init_myfunc();

+	jQuery("#mybutton").click(function() {

+		init_myfunc();

+	});

+});

+</script>';

+

+

+// Part to create

+if ($action == 'create')

+{

+	print load_fiche_titre($langs->trans("NewObject", $langs->transnoentitiesnoconv("MyObject")));

+

+	print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';

+	print '<input type="hidden" name="token" value="'.newToken().'">';

+	print '<input type="hidden" name="action" value="add">';

+	print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';

+

+	dol_fiche_head(array(), '');

+

+	print '<table class="border centpercent">'."\n";

+

+	// Common attributes

+	include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_add.tpl.php';

+

+	// Other attributes

+	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_add.tpl.php';

+

+	print '</table>'."\n";

+

+	dol_fiche_end();

+

+	print '<div class="center">';

+	print '<input type="submit" class="button" name="add" value="'.dol_escape_htmltag($langs->trans("Create")).'">';

+	print '&nbsp; ';

+	print '<input type="'.($backtopage ? "submit" : "button").'" class="button" name="cancel" value="'.dol_escape_htmltag($langs->trans("Cancel")).'"'.($backtopage ? '' : ' onclick="javascript:history.go(-1)"').'>'; // Cancel for create does not post form if we don't know the backtopage

+	print '</div>';

+

+	print '</form>';

+}

+

+// Part to edit record

+if (($id || $ref) && $action == 'edit')

+{

+	print load_fiche_titre($langs->trans("MyObject"));

+

+	print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';

+    print '<input type="hidden" name="token" value="'.newToken().'">';

+	print '<input type="hidden" name="action" value="update">';

+	print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';

+	print '<input type="hidden" name="id" value="'.$object->id.'">';

+

+	dol_fiche_head();

+

+	print '<table class="border centpercent">'."\n";

+

+	// Common attributes

+	include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_edit.tpl.php';

+

+	// Other attributes

+	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_edit.tpl.php';

+

+	print '</table>';

+

+	dol_fiche_end();

+

+	print '<div class="center"><input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">';

+	print ' &nbsp; <input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">';

+	print '</div>';

+

+	print '</form>';

+}

+

+// Part to show record

+if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'create')))

+{

+    $res = $object->fetch_optionals();

+

+	$head = myobjectPrepareHead($object);

+	dol_fiche_head($head, 'card', $langs->trans("MyObject"), -1, 'myobject@mymodule');

+

+	$formconfirm = '';

+

+	// Confirmation to delete

+	if ($action == 'delete')

+	{

+	    $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('DeleteMyObject'), $langs->trans('ConfirmDeleteMyObject'), 'confirm_delete', '', 0, 1);

+	}

+

+	// Clone confirmation

+	if ($action == 'clone') {

+		// Create an array for form

+		$formquestion = array();

+		$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneMyObject', $object->ref), 'confirm_clone', $formquestion, 'yes', 1);

+	}

+

+	// Confirmation of action xxxx

+	if ($action == 'xxx')

+	{

+		$formquestion = array();

+	    /*

+		$forcecombo=0;

+		if ($conf->browser->name == 'ie') $forcecombo = 1;	// There is a bug in IE10 that make combo inside popup crazy

+	    $formquestion = array(

+	        // 'text' => $langs->trans("ConfirmClone"),

+	        // array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1),

+	        // array('type' => 'checkbox', 'name' => 'update_prices', 'label' => $langs->trans("PuttingPricesUpToDate"), 'value' => 1),

+	        // array('type' => 'other',    'name' => 'idwarehouse',   'label' => $langs->trans("SelectWarehouseForStockDecrease"), 'value' => $formproduct->selectWarehouses(GETPOST('idwarehouse')?GETPOST('idwarehouse'):'ifone', 'idwarehouse', '', 1, 0, 0, '', 0, $forcecombo))

+        );

+	    */

+	    $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('XXX'), $text, 'confirm_xxx', $formquestion, 0, 1, 220);

+	}

+

+	// Call Hook formConfirm

+	$parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);

+	$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook

+	if (empty($reshook)) $formconfirm .= $hookmanager->resPrint;

+	elseif ($reshook > 0) $formconfirm = $hookmanager->resPrint;

+

+	// Print form confirm

+	print $formconfirm;

+

+

+	// Object card

+	// ------------------------------------------------------------

+	$linkback = '<a href="'.dol_buildpath('/mymodule/myobject_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';

+

+	$morehtmlref = '<div class="refidno">';

+	/*

+	// Ref bis

+	$morehtmlref.=$form->editfieldkey("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mymodule->creer, 'string', '', 0, 1);

+	$morehtmlref.=$form->editfieldval("RefBis", 'ref_client', $object->ref_client, $object, $user->rights->mymodule->creer, 'string', '', null, null, '', 1);

+	// Thirdparty

+	$morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . $soc->getNomUrl(1);

+	// Project

+	if (! empty($conf->projet->enabled))

+	{

+	    $langs->load("projects");

+	    $morehtmlref.='<br>'.$langs->trans('Project') . ' ';

+	    if ($user->rights->mymodule->write)

+	    {

+	        if ($action != 'classify')

+	            $morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';

+            if ($action == 'classify') {

+                //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);

+                $morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';

+                $morehtmlref.='<input type="hidden" name="action" value="classin">';

+                $morehtmlref.='<input type="hidden" name="token" value="'.newToken().'">';

+                $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', 0, 0, 1, 0, 1, 0, 0, '', 1);

+                $morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';

+                $morehtmlref.='</form>';

+            } else {

+                $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);

+	        }

+	    } else {

+	        if (! empty($object->fk_project)) {

+	            $proj = new Project($db);

+	            $proj->fetch($object->fk_project);

+	            $morehtmlref.=$proj->getNomUrl();

+	        } else {

+	            $morehtmlref.='';

+	        }

+	    }

+	}

+	*/

+	$morehtmlref .= '</div>';

+

+

+	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);

+

+

+	print '<div class="fichecenter">';

+	print '<div class="fichehalfleft">';

+	print '<div class="underbanner clearboth"></div>';

+	print '<table class="border centpercent">'."\n";

+

+	// Common attributes

+	//$keyforbreak='fieldkeytoswithonsecondcolumn';

+	include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';

+

+	// Other attributes

+	include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_view.tpl.php';

+

+	print '</table>';

+	print '</div>';

+	print '</div>';

+

+	print '<div class="clearboth"></div><br>';

+

+	dol_fiche_end();

+

+

+	// Buttons for actions

+	if ($action != 'presend' && $action != 'editline') {

+    	print '<div class="tabsAction">'."\n";

+    	$parameters = array();

+    	$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook

+    	if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');

+

+    	if (empty($reshook))

+    	{

+            // Modify

+    		if ($user->rights->mymodule->write)

+    		{

+    			print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=edit">'.$langs->trans("Modify").'</a>'."\n";

+    		}

+    		else

+    		{

+    			print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans('Modify').'</a>'."\n";

+    		}

+

+    		// Clone

+    		if ($user->rights->mymodule->write)

+    		{

+    			print '<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'&amp;socid='.$object->socid.'&amp;action=clone&amp;object=order">'.$langs->trans("ToClone").'</a></div>';

+    		}

+

+    		/*

+    		if ($user->rights->mymodule->write)

+    		{

+    			if ($object->status == 1)

+    		 	{

+    		 		print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=disable">'.$langs->trans("Disable").'</a>'."\n";

+    		 	}

+    		 	else

+    		 	{

+    		 		print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=enable">'.$langs->trans("Enable").'</a>'."\n";

+    		 	}

+    		}

+    		*/

+

+    		if ($user->rights->mymodule->delete)

+    		{

+    			print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&amp;action=delete">'.$langs->trans('Delete').'</a>'."\n";

+    		}

+    		else

+    		{

+    			print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans('Delete').'</a>'."\n";

+    		}

+    	}

+    	print '</div>'."\n";

+	}

+

+

+	// Select mail models is same action as presend

+	if (GETPOST('modelselected')) {

+		$action = 'presend';

+	}

+

+	if ($action != 'presend')

+	{

+	    print '<div class="fichecenter"><div class="fichehalfleft">';

+	    print '<a name="builddoc"></a>'; // ancre

+

+	    // Documents

+	    /*$objref = dol_sanitizeFileName($object->ref);

+	    $relativepath = $comref . '/' . $comref . '.pdf';

+	    $filedir = $conf->mymodule->dir_output . '/' . $objref;

+	    $urlsource = $_SERVER["PHP_SELF"] . "?id=" . $object->id;

+	    $genallowed = $user->rights->mymodule->read;	// If you can read, you can build the PDF to read content

+	    $delallowed = $user->rights->mymodule->create;	// If you can create/edit, you can remove a file on card

+	    print $formfile->showdocuments('mymodule', $objref, $filedir, $urlsource, $genallowed, $delallowed, $object->modelpdf, 1, 0, 0, 28, 0, '', '', '', $soc->default_lang);

+		*/

+

+	    // Show links to link elements

+	    $linktoelem = $form->showLinkToObjectBlock($object, null, array('myobject'));

+	    $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);

+

+

+	    print '</div><div class="fichehalfright"><div class="ficheaddleft">';

+

+	    $MAXEVENT = 10;

+

+	    $morehtmlright = '<a href="'.dol_buildpath('/mymodule/myobject_info.php', 1).'?id='.$object->id.'">';

+	    $morehtmlright .= $langs->trans("SeeAll");

+	    $morehtmlright .= '</a>';

+

+	    // List of actions on element

+	    include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';

+	    $formactions = new FormActions($db);

+	    $somethingshown = $formactions->showactions($object, 'myobject', $socid, 1, '', $MAXEVENT, '', $morehtmlright);

+

+	    print '</div></div></div>';

+	}

+

+	//Select mail models is same action as presend

+	/*

+	 if (GETPOST('modelselected')) $action = 'presend';

+

+	 // Presend form

+	 $modelmail='inventory';

+	 $defaulttopic='InformationMessage';

+	 $diroutput = $conf->product->dir_output.'/inventory';

+	 $trackid = 'stockinv'.$object->id;

+

+	 include DOL_DOCUMENT_ROOT.'/core/tpl/card_presend.tpl.php';

+	 */

+}

+

+// End of page

+llxFooter();

+$db->close();

--- /tmp/dsg/dolibarr/htdocs/zapier/github_19.0.3_hook_document.php
+++ /tmp/dsg/dolibarr/htdocs/zapier/client_hook_document.php
@@ -0,0 +1,143 @@
+<?php

+/* Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>

+ * Copyright (C) ---Put here your own copyright and developer email---

+ *

+ * This program is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 3 of the License, or

+ * (at your option) any later version.

+ *

+ * This program is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ *

+ * You should have received a copy of the GNU General Public License

+ * along with this program. If not, see <http://www.gnu.org/licenses/>.

+ */

+

+/**

+ *  \file       htdocs/zapier/myobject_document.php

+ *  \ingroup    mymodule

+ *  \brief      Tab for documents linked to MyObject

+ */

+

+// Load Dolibarr environment

+require '../main.inc.php';

+require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';

+require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';

+require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';

+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';

+dol_include_once('/mymodule/class/myobject.class.php');

+dol_include_once('/mymodule/lib/mymodule_myobject.lib.php');

+

+// Load translation files required by the page

+$langs->loadLangs(array("mymodule@mymodule", "companies", "other", "mails"));

+

+

+$action = GETPOST('action', 'aZ09');

+$confirm = GETPOST('confirm');

+$id = (GETPOST('socid', 'int') ? GETPOST('socid', 'int') : GETPOST('id', 'int'));

+$ref = GETPOST('ref', 'alpha');

+

+// Security check - Protection if external user

+//if ($user->socid > 0) accessforbidden();

+//if ($user->socid > 0) $socid = $user->socid;

+//$result = restrictedArea($user, 'mymodule', $id);

+

+// Get parameters

+$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;

+$sortfield = GETPOST("sortfield", 'alpha');

+$sortorder = GETPOST("sortorder", 'alpha');

+$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');

+if (empty($page) || $page == -1) { $page = 0; }     // If $page is not defined, or '' or -1

+$offset = $limit * $page;

+$pageprev = $page - 1;

+$pagenext = $page + 1;

+if (!$sortorder) $sortorder = "ASC";

+if (!$sortfield) $sortfield = "name";

+//if (! $sortfield) $sortfield="position_name";

+

+// Initialize technical objects

+$object = new MyObject($db);

+$extrafields = new ExtraFields($db);

+$diroutputmassaction = $conf->mymodule->dir_output.'/temp/massgeneration/'.$user->id;

+$hookmanager->initHooks(array('myobjectdocument', 'globalcard')); // Note that conf->hooks_modules contains array

+

+// Fetch optionals attributes and labels

+$extrafields->fetch_name_optionals_label($object->table_element);

+

+// Load object

+include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once  // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals

+

+//if ($id > 0 || ! empty($ref)) $upload_dir = $conf->sellyoursaas->multidir_output[$object->entity] . "/myobject/" . dol_sanitizeFileName($object->id);

+if ($id > 0 || !empty($ref)) $upload_dir = $conf->sellyoursaas->multidir_output[$object->entity]."/myobject/".dol_sanitizeFileName($object->ref);

+

+

+/*

+ * Actions

+ */

+

+include_once DOL_DOCUMENT_ROOT.'/core/actions_linkedfiles.inc.php';

+

+

+/*

+ * View

+ */

+

+$form = new Form($db);

+

+$title = $langs->trans("MyObject").' - '.$langs->trans("Files");

+$help_url = '';

+//$help_url='EN:Module_Third_Parties|FR:Module_Tiers|ES:Empresas';

+llxHeader('', $title, $help_url);

+

+if ($object->id)

+{

+	/*

+	 * Show tabs

+	 */

+	$head = myobjectPrepareHead($object);

+

+	dol_fiche_head($head, 'document', $langs->trans("MyObject"), -1, 'myobject@mymodule');

+

+

+	// Build file list

+	$filearray = dol_dir_list($upload_dir, "files", 0, '', '(\.meta|_preview.*\.png)$', $sortfield, (strtolower($sortorder) == 'desc' ?SORT_DESC:SORT_ASC), 1);

+	$totalsize = 0;

+	foreach ($filearray as $key => $file)

+	{

+		$totalsize += $file['size'];

+	}

+

+	// Object card

+	// ------------------------------------------------------------

+	$linkback = '<a href="'.dol_buildpath('/mymodule/myobject_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';

+

+	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);

+

+    print '<div class="fichecenter">';

+

+    print '<div class="underbanner clearboth"></div>';

+	print '<table class="border centpercent">';

+

+	// Number of files

+	print '<tr><td class="titlefield">'.$langs->trans("NbOfAttachedFiles").'</td><td colspan="3">'.count($filearray).'</td></tr>';

+

+	// Total size

+	print '<tr><td>'.$langs->trans("TotalSizeOfAttachedFiles").'</td><td colspan="3">'.$totalsize.' '.$langs->trans("bytes").'</td></tr>';

+

+	print '</table>';

+

+	print '</div>';

+

+	dol_fiche_end();

+}

+else

+{

+	accessforbidden('', 0, 0);

+}

+

+// End of page

+llxFooter();

+$db->close();

--- /tmp/dsg/dolibarr/htdocs/zapier/github_19.0.3_hook_list.php
+++ /tmp/dsg/dolibarr/htdocs/zapier/client_hook_list.php
@@ -0,0 +1,593 @@
+<?php

+/* Copyright (C) 2007-2017  Laurent Destailleur     <eldy@users.sourceforge.net>

+ * Copyright (C) 2019       Frédéric France         <frederic.france@netlogic.fr>

+ *

+ * This program is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 3 of the License, or

+ * (at your option) any later version.

+ *

+ * This program is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ *

+ * You should have received a copy of the GNU General Public License

+ * along with this program. If not, see <http://www.gnu.org/licenses/>.

+ */

+

+/**

+ *  \file       htdocs/zapier/hook_list.php

+ *  \ingroup    zapier

+ *  \brief      List page for hook

+ */

+

+

+// Load Dolibarr environment

+require '../main.inc.php';

+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';

+require_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';

+require_once DOL_DOCUMENT_ROOT.'/core/lib/company.lib.php';

+require_once __DIR__.'/class/hook.class.php';

+

+// Load translation files required by the page

+$langs->loadLangs(array("mymodule@mymodule", "other"));

+

+// The action 'add', 'create', 'edit', 'update', 'view', ...

+$action = GETPOST('action', 'aZ09') ?GETPOST('action', 'aZ09') : 'view';

+// The bulk action (combo box choice into lists)

+$massaction = GETPOST('massaction', 'alpha');

+$show_files = GETPOST('show_files', 'int'); // Show files area generated by bulk actions ?

+$confirm = GETPOST('confirm', 'alpha'); // Result of a confirmation

+$cancel = GETPOST('cancel', 'alpha'); // We click on a Cancel button

+$toselect = GETPOST('toselect', 'array'); // Array of ids of elements selected into a list

+$contextpage = GETPOST('contextpage', 'aZ') ?GETPOST('contextpage', 'aZ') : 'hooklist'; // To manage different context of search

+$backtopage = GETPOST('backtopage', 'alpha'); // Go back to a dedicated page

+$optioncss = GETPOST('optioncss', 'aZ'); // Option for the css output (always '' except when 'print')

+

+$id = GETPOST('id', 'int');

+

+// Load variable for pagination

+$limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;

+$sortfield = GETPOST('sortfield', 'alpha');

+$sortorder = GETPOST('sortorder', 'alpha');

+$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');

+if (empty($page) || $page == -1 || GETPOST('button_search', 'alpha') || GETPOST('button_removefilter', 'alpha') || (empty($toselect) && $massaction === '0')) {

+    // If $page is not defined, or '' or -1 or if we click on clear filters or if we select empty mass action

+    $page = 0;

+}

+$offset = $limit * $page;

+$pageprev = $page - 1;

+$pagenext = $page + 1;

+//if (! $sortfield) $sortfield="p.date_fin";

+//if (! $sortorder) $sortorder="DESC";

+

+// Initialize technical objects

+$object = new Hook($db);

+$extrafields = new ExtraFields($db);

+$diroutputmassaction = $conf->mymodule->dir_output.'/temp/massgeneration/'.$user->id;

+// Note that conf->hooks_modules contains array

+$hookmanager->initHooks(array('hooklist'));

+

+// Fetch optionals attributes and labels

+$extrafields->fetch_name_optionals_label($object->table_element);

+

+$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, '', 'search_');

+

+// Default sort order (if not yet defined by previous GETPOST)

+if (!$sortfield) {

+    // Set here default search field. By default 1st field in definition.

+    $sortfield = "t.".key($object->fields);

+}

+if (!$sortorder) {

+    $sortorder = "ASC";

+}

+

+// Security check

+$socid = 0;

+if ($user->socid > 0) {

+    // Protection if external user

+    //$socid = $user->socid;

+    accessforbidden();

+}

+//$result = restrictedArea($user, 'mymodule', $id, '');

+

+// Initialize array of search criterias

+$search_all = trim(GETPOST("search_all", 'alpha'));

+$search = array();

+foreach ($object->fields as $key => $val) {

+    if (GETPOST('search_'.$key, 'alpha')) $search[$key] = GETPOST('search_'.$key, 'alpha');

+}

+

+// List of fields to search into when doing a "search in all"

+$fieldstosearchall = array();

+foreach ($object->fields as $key => $val) {

+    if ($val['searchall']) $fieldstosearchall['t.'.$key] = $val['label'];

+}

+

+// Definition of fields for list

+$arrayfields = array();

+foreach ($object->fields as $key => $val) {

+    // If $val['visible']==0, then we never show the field

+    if (!empty($val['visible'])) $arrayfields['t.'.$key] = array('label'=>$val['label'], 'checked'=>(($val['visible'] < 0) ? 0 : 1), 'enabled'=>$val['enabled'], 'position'=>$val['position']);

+}

+// Extra fields

+if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label']) > 0) {

+    foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {

+        if (!empty($extrafields->attributes[$object->table_element]['list'][$key]))

+            $arrayfields["ef.".$key] = array('label'=>$extrafields->attributes[$object->table_element]['label'][$key], 'checked'=>(($extrafields->attributes[$object->table_element]['list'][$key] < 0) ? 0 : 1), 'position'=>$extrafields->attributes[$object->table_element]['pos'][$key], 'enabled'=>(abs($extrafields->attributes[$object->table_element]['list'][$key]) != 3 && $extrafields->attributes[$object->table_element]['perms'][$key]));

+    }

+}

+$object->fields = dol_sort_array($object->fields, 'position');

+$arrayfields = dol_sort_array($arrayfields, 'position');

+

+

+

+/*

+ * Actions

+ */

+

+if (GETPOST('cancel', 'alpha')) {

+    $action = 'list';

+    $massaction = '';

+}

+if (!GETPOST('confirmmassaction', 'alpha') && $massaction != 'presend' && $massaction != 'confirm_presend') {

+    $massaction = '';

+}

+

+$parameters = array();

+$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks

+if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');

+

+if (empty($reshook)) {

+    // Selection of new fields

+    include DOL_DOCUMENT_ROOT.'/core/actions_changeselectedfields.inc.php';

+

+    // Purge search criteria

+    if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) {

+        // All tests are required to be compatible with all browsers

+        foreach ($object->fields as $key => $val) {

+            $search[$key] = '';

+        }

+        $toselect = '';

+        $search_array_options = array();

+    }

+    if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')

+        || GETPOST('button_search_x', 'alpha') || GETPOST('button_search.x', 'alpha') || GETPOST('button_search', 'alpha')) {

+        $massaction = ''; // Protection to avoid mass action if we force a new search during a mass action confirmation

+    }

+

+    // Mass actions

+    $objectclass = 'Hook';

+    $objectlabel = 'Hook';

+    $permissiontoread = $user->rights->mymodule->read;

+    $permissiontodelete = $user->rights->mymodule->delete;

+    $uploaddir = $conf->mymodule->dir_output;

+    include DOL_DOCUMENT_ROOT.'/core/actions_massactions.inc.php';

+}

+

+

+

+/*

+ * View

+ */

+

+$form = new Form($db);

+

+$now = dol_now();

+

+//$help_url="EN:Module_Hook|FR:Module_Hook_FR|ES:Módulo_Hook";

+$help_url = '';

+$title = $langs->trans('ListOf', $langs->transnoentitiesnoconv("Hooks"));

+

+

+// Build and execute select

+// --------------------------------------------------------------------

+$sql = 'SELECT ';

+foreach ($object->fields as $key => $val) {

+    $sql .= 't.'.$key.', ';

+}

+// Add fields from extrafields

+if (!empty($extrafields->attributes[$object->table_element]['label'])) {

+    foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) {

+        $sql .= ($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.' as options_'.$key.', ' : '');

+    }

+}

+// Add fields from hooks

+$parameters = array();

+$reshook = $hookmanager->executeHooks('printFieldListSelect', $parameters, $object); // Note that $action and $object may have been modified by hook

+$sql .= $hookmanager->resPrint;

+$sql = preg_replace('/, $/', '', $sql);

+$sql .= " FROM ".MAIN_DB_PREFIX.$object->table_element." as t";

+if (is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) $sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (t.rowid = ef.fk_object)";

+if ($object->ismultientitymanaged == 1) {

+    $sql .= " WHERE t.entity IN (".getEntity($object->element).")";

+} else {

+    $sql .= " WHERE 1 = 1";

+}

+foreach ($search as $key => $val) {

+    if ($key == 'status' && $search[$key] == -1) {

+        continue;

+    }

+    $mode_search = (($object->isInt($object->fields[$key]) || $object->isFloat($object->fields[$key])) ? 1 : 0);

+    if ($search[$key] != '') {

+        $sql .= natural_search($key, $search[$key], (($key == 'status') ? 2 : $mode_search));

+    }

+}

+if ($search_all) {

+    $sql .= natural_search(array_keys($fieldstosearchall), $search_all);

+}

+// Add where from extra fields

+include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_sql.tpl.php';

+// Add where from hooks

+$parameters = array();

+$reshook = $hookmanager->executeHooks('printFieldListWhere', $parameters, $object); // Note that $action and $object may have been modified by hook

+$sql .= $hookmanager->resPrint;

+

+/* If a group by is required

+$sql.= " GROUP BY "

+foreach($object->fields as $key => $val)

+{

+    $sql.='t.'.$key.', ';

+}

+// Add fields from extrafields

+if (! empty($extrafields->attributes[$object->table_element]['label'])) {

+    foreach ($extrafields->attributes[$object->table_element]['label'] as $key => $val) $sql.=($extrafields->attributes[$object->table_element]['type'][$key] != 'separate' ? "ef.".$key.', ' : '');

+// Add where from hooks

+$parameters=array();

+$reshook=$hookmanager->executeHooks('printFieldListGroupBy',$parameters);    // Note that $action and $object may have been modified by hook

+$sql.=$hookmanager->resPrint;

+$sql=preg_replace('/, $/','', $sql);

+*/

+

+$sql .= $db->order($sortfield, $sortorder);

+

+// Count total nb of records

+$nbtotalofrecords = '';

+if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST)) {

+    $resql = $db->query($sql);

+    $nbtotalofrecords = $db->num_rows($resql);

+    if (($page * $limit) > $nbtotalofrecords) {

+        // if total of record found is smaller than page * limit, goto and load page 0

+        $page = 0;

+        $offset = 0;

+    }

+}

+// if total of record found is smaller than limit, no need to do paging and to restart another select with limits set.

+if (is_numeric($nbtotalofrecords) && $limit > $nbtotalofrecords) {

+    $num = $nbtotalofrecords;

+} else {

+    $sql .= $db->plimit($limit + 1, $offset);

+

+    $resql = $db->query($sql);

+    if (!$resql) {

+        dol_print_error($db);

+        exit;

+    }

+

+    $num = $db->num_rows($resql);

+}

+

+// Direct jump if only one record found

+if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && $search_all) {

+    $obj = $db->fetch_object($resql);

+    $id = $obj->rowid;

+    header("Location: ".dol_buildpath('/zapierfordolibarr/hook_card.php', 1).'?id='.$id);

+    exit;

+}

+

+

+// Output page

+// --------------------------------------------------------------------

+

+llxHeader('', $title, $help_url);

+

+// Example : Adding jquery code

+print '<script type="text/javascript" language="javascript">

+jQuery(document).ready(function() {

+    function init_myfunc()

+    {

+        jQuery("#myid").removeAttr(\'disabled\');

+        jQuery("#myid").attr(\'disabled\',\'disabled\');

+    }

+    init_myfunc();

+    jQuery("#mybutton").click(function() {

+        init_myfunc();

+    });

+});

+</script>';

+

+$arrayofselected = is_array($toselect) ? $toselect : array();

+

+$param = '';

+if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) $param .= '&contextpage='.urlencode($contextpage);

+if ($limit > 0 && $limit != $conf->liste_limit) $param .= '&limit='.urlencode($limit);

+foreach ($search as $key => $val) {

+    if (is_array($search[$key]) && count($search[$key])) {

+        foreach ($search[$key] as $skey) {

+            $param .= '&search_'.$key.'[]='.urlencode($skey);

+        }

+    } else {

+        $param .= '&search_'.$key.'='.urlencode($search[$key]);

+    }

+}

+if ($optioncss != '')     $param .= '&optioncss='.urlencode($optioncss);

+// Add $param from extra fields

+include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';

+

+// List of mass actions available

+$arrayofmassactions = array(

+    //'presend'=>$langs->trans("SendByMail"),

+    //'builddoc'=>$langs->trans("PDFMerge"),

+);

+if ($user->rights->mymodule->delete) $arrayofmassactions['predelete'] = '<span class="fa fa-trash paddingrightonly"></span>'.$langs->trans("Delete");

+if (GETPOST('nomassaction', 'int') || in_array($massaction, array('presend', 'predelete'))) $arrayofmassactions = array();

+$massactionbutton = $form->selectMassAction('', $arrayofmassactions);

+

+print '<form method="POST" id="searchFormList" action="'.$_SERVER["PHP_SELF"].'">';

+if ($optioncss != '') print '<input type="hidden" name="optioncss" value="'.$optioncss.'">';

+print '<input type="hidden" name="token" value="'.newToken().'">';

+print '<input type="hidden" name="formfilteraction" id="formfilteraction" value="list">';

+print '<input type="hidden" name="action" value="list">';

+print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';

+print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';

+print '<input type="hidden" name="page" value="'.$page.'">';

+print '<input type="hidden" name="contextpage" value="'.$contextpage.'">';

+

+$newcardbutton = '';

+//if ($user->rights->mymodule->creer)

+//{

+    $newcardbutton = '<a class="butActionNew" href="hook_card.php?action=create&backtopage='.urlencode($_SERVER['PHP_SELF']).'"><span class="valignmiddle text-plus-circle">'.$langs->trans('New').'</span>';

+    $newcardbutton .= '<span class="fa fa-plus-circle valignmiddle"></span>';

+    $newcardbutton .= '</a>';

+//}

+//else

+//{

+//    $newcardbutton='<a class="butActionNewRefused" href="#"><span class="valignmiddle text-plus-circle">'.$langs->trans('New').'</span>;

+//    $newcardbutton.= '<span class="fa fa-plus-circle valignmiddle"></span>';

+//    $newcardbutton.= '</a>';

+//}

+

+print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, $massactionbutton, $num, $nbtotalofrecords, 'title_companies', 0, $newcardbutton, '', $limit);

+

+// Add code for pre mass action (confirmation or email presend form)

+$topicmail = "SendHookRef";

+$modelmail = "hook";

+$objecttmp = new Hook($db);

+$trackid = 'xxxx'.$object->id;

+include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';

+

+if ($sall) {

+    foreach ($fieldstosearchall as $key => $val) $fieldstosearchall[$key] = $langs->trans($val);

+    print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall).join(', ', $fieldstosearchall).'</div>';

+}

+

+$moreforfilter = '';

+/*$moreforfilter.='<div class="divsearchfield">';

+$moreforfilter.= $langs->trans('MyFilter') . ': <input type="text" name="search_myfield" value="'.dol_escape_htmltag($search_myfield).'">';

+$moreforfilter.= '</div>';*/

+

+$parameters = array();

+$reshook = $hookmanager->executeHooks('printFieldPreListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook

+if (empty($reshook)) $moreforfilter .= $hookmanager->resPrint;

+else $moreforfilter = $hookmanager->resPrint;

+

+if (!empty($moreforfilter)) {

+    print '<div class="liste_titre liste_titre_bydiv centpercent">';

+    print $moreforfilter;

+    print '</div>';

+}

+

+$varpage = empty($contextpage) ? $_SERVER["PHP_SELF"] : $contextpage;

+$selectedfields = $form->multiSelectArrayWithCheckbox('selectedfields', $arrayfields, $varpage); // This also change content of $arrayfields

+$selectedfields .= (count($arrayofmassactions) ? $form->showCheckAddButtons('checkforselect', 1) : '');

+

+print '<div class="div-table-responsive">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table

+print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";

+

+

+// Fields title search

+// --------------------------------------------------------------------

+print '<tr class="liste_titre">';

+foreach ($object->fields as $key => $val) {

+    $cssforfield = '';

+    if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) {

+        $cssforfield .= ($cssforfield ? ' ' : '').'center';

+    }

+    if (in_array($val['type'], array('timestamp'))) {

+        $cssforfield .= ($cssforfield ? ' ' : '').'nowrap';

+    }

+    if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real'))) {

+        $cssforfield .= ($cssforfield ? ' ' : '').'right';

+    }

+    if ($key == 'status') {

+        $cssforfield .= ($cssforfield ? ' ' : '').'center';

+    }

+    if (!empty($arrayfields['t.'.$key]['checked'])) {

+        print '<td class="liste_titre'.($cssforfield ? ' '.$cssforfield : '').'"><input type="text" class="flat maxwidth75" name="search_'.$key.'" value="'.dol_escape_htmltag($search[$key]).'"></td>';

+    }

+}

+// Extra fields

+include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_input.tpl.php';

+

+// Fields from hook

+$parameters = array('arrayfields'=>$arrayfields);

+$reshook = $hookmanager->executeHooks('printFieldListOption', $parameters, $object); // Note that $action and $object may have been modified by hook

+print $hookmanager->resPrint;

+// Action column

+print '<td class="liste_titre right">';

+$searchpicto = $form->showFilterButtons();

+print $searchpicto;

+print '</td>';

+print '</tr>'."\n";

+

+

+// Fields title label

+// --------------------------------------------------------------------

+print '<tr class="liste_titre">';

+foreach ($object->fields as $key => $val) {

+    $cssforfield = '';

+    if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) $cssforfield .= ($cssforfield ? ' ' : '').'center';

+    if (in_array($val['type'], array('timestamp'))) $cssforfield .= ($cssforfield ? ' ' : '').'nowrap';

+    if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real'))) $cssforfield .= ($cssforfield ? ' ' : '').'right';

+    if ($key == 'status') {

+        $cssforfield .= ($cssforfield ? ' ' : '').'center';

+    }

+    if (!empty($arrayfields['t.'.$key]['checked'])) {

+        print getTitleFieldOfList($arrayfields['t.'.$key]['label'], 0, $_SERVER['PHP_SELF'], 't.'.$key, '', $param, ($cssforfield ? 'class="'.$cssforfield.'"' : ''), $sortfield, $sortorder, ($cssforfield ? $cssforfield.' ' : ''))."\n";

+    }

+}

+// Extra fields

+include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';

+// Hook fields

+$parameters = array(

+    'arrayfields' => $arrayfields,

+    'param' => $param,

+    'sortfield' => $sortfield,

+    'sortorder' => $sortorder,

+);

+$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object); // Note that $action and $object may have been modified by hook

+print $hookmanager->resPrint;

+// Action column

+print getTitleFieldOfList($selectedfields, 0, $_SERVER["PHP_SELF"], '', '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ')."\n";

+print '</tr>'."\n";

+

+

+// Detect if we need a fetch on each output line

+$needToFetchEachLine = 0;

+if (is_array($extrafields->attributes[$object->table_element]['computed']) && count($extrafields->attributes[$object->table_element]['computed']) > 0) {

+    foreach ($extrafields->attributes[$object->table_element]['computed'] as $key => $val) {

+        if (preg_match('/\$object/', $val)) {

+            // There is at least one compute field that use $object

+            $needToFetchEachLine++;

+        }

+    }

+}

+

+

+// Loop on record

+// --------------------------------------------------------------------

+$i = 0;

+$totalarray = array();

+while ($i < min($num, $limit)) {

+    $obj = $db->fetch_object($resql);

+    if (empty($obj)) {

+        break; // Should not happen

+    }

+

+    // Store properties in $object

+    $object->id = $obj->rowid;

+    foreach ($object->fields as $key => $val) {

+        if (isset($obj->$key)) $object->$key = $obj->$key;

+    }

+

+    // Show here line of result

+    print '<tr class="oddeven">';

+    foreach ($object->fields as $key => $val) {

+        $cssforfield = '';

+        if (in_array($val['type'], array('date', 'datetime', 'timestamp'))) {

+            $cssforfield .= ($cssforfield ? ' ' : '').'center';

+        } elseif ($key == 'status') {

+            $cssforfield .= ($cssforfield ? ' ' : '').'center';

+        }

+

+        if (in_array($val['type'], array('timestamp'))) $cssforfield .= ($cssforfield ? ' ' : '').'nowrap';

+        elseif ($key == 'ref') $cssforfield .= ($cssforfield ? ' ' : '').'nowrap';

+

+        if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real'))) $cssforfield .= ($cssforfield ? ' ' : '').'right';

+

+        if (!empty($arrayfields['t.'.$key]['checked'])) {

+            print '<td';

+            if ($cssforfield || $val['css']) print ' class="';

+            print $cssforfield;

+            if ($cssforfield && $val['css']) print ' ';

+            print $val['css'];

+            if ($cssforfield || $val['css']) print '"';

+            print '>';

+            if ($key == 'status') print $object->getLibStatut(5);

+            elseif (in_array($val['type'], array('date', 'datetime', 'timestamp'))) print $object->showOutputField($val, $key, $db->jdate($obj->$key), '');

+            else print $object->showOutputField($val, $key, $obj->$key, '');

+            print '</td>';

+            if (!$i) $totalarray['nbfield']++;

+            if (!empty($val['isameasure']))

+            {

+                if (!$i) $totalarray['pos'][$totalarray['nbfield']] = 't.'.$key;

+                $totalarray['val']['t.'.$key] += $obj->$key;

+            }

+        }

+    }

+    // Extra fields

+    include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';

+    // Fields from hook

+    $parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);

+    $reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object); // Note that $action and $object may have been modified by hook

+    print $hookmanager->resPrint;

+    // Action column

+    print '<td class="nowrap center">';

+    if ($massactionbutton || $massaction) {

+        // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined

+        $selected = 0;

+        if (in_array($obj->rowid, $arrayofselected)) $selected = 1;

+        print '<input id="cb'.$obj->rowid.'" class="flat checkforselect" type="checkbox" name="toselect[]" value="'.$obj->rowid.'"'.($selected ? ' checked="checked"' : '').'>';

+    }

+    print '</td>';

+    if (!$i) $totalarray['nbfield']++;

+

+    print '</tr>';

+

+    $i++;

+}

+

+// Show total line

+include DOL_DOCUMENT_ROOT.'/core/tpl/list_print_total.tpl.php';

+

+

+// If no record found

+if ($num == 0) {

+    $colspan = 1;

+    foreach ($arrayfields as $key => $val) {

+        if (!empty($val['checked'])) {

+            $colspan++;

+        }

+    }

+    print '<tr><td colspan="'.$colspan.'" class="opacitymedium">'.$langs->trans("NoRecordFound").'</td></tr>';

+}

+

+

+$db->free($resql);

+

+$parameters = array(

+    'arrayfields' => $arrayfields,

+    'sql' => $sql,

+);

+$reshook = $hookmanager->executeHooks('printFieldListFooter', $parameters, $object); // Note that $action and $object may have been modified by hook

+print $hookmanager->resPrint;

+

+print '</table>'."\n";

+print '</div>'."\n";

+

+print '</form>'."\n";

+

+if (in_array('builddoc', $arrayofmassactions) && ($nbtotalofrecords === '' || $nbtotalofrecords)) {

+    $hidegeneratedfilelistifempty = 1;

+    if ($massaction == 'builddoc' || $action == 'remove_file' || $show_files) {

+        $hidegeneratedfilelistifempty = 0;

+    }

+

+    require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';

+    $formfile = new FormFile($db);

+

+    // Show list of available documents

+    $urlsource = $_SERVER['PHP_SELF'].'?sortfield='.$sortfield.'&sortorder='.$sortorder;

+    $urlsource .= str_replace('&amp;', '&', $param);

+

+    $filedir = $diroutputmassaction;

+    $genallowed = $user->rights->mymodule->read;

+    $delallowed = $user->rights->mymodule->create;

+

+    print $formfile->showdocuments('massfilesarea_mymodule', '', $filedir, $urlsource, 0, $delallowed, '', 1, 1, 0, 48, 1, $param, $title, '', '', '', null, $hidegeneratedfilelistifempty);

+}

+

+// End of page

+llxFooter();

+$db->close();

--- /tmp/dsg/dolibarr/htdocs/zapier/github_19.0.3_hook_note.php
+++ /tmp/dsg/dolibarr/htdocs/zapier/client_hook_note.php
@@ -0,0 +1,152 @@
+<?php

+/* Copyright (C) 2007-2017 Laurent Destailleur  <eldy@users.sourceforge.net>

+ * Copyright (C) ---Put here your own copyright and developer email---

+ *

+ * This program is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 3 of the License, or

+ * (at your option) any later version.

+ *

+ * This program is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ *

+ * You should have received a copy of the GNU General Public License

+ * along with this program. If not, see <http://www.gnu.org/licenses/>.

+ */

+

+/**

+ *  \file       htdocs/modulebuilder/template/myobject_note.php

+ *  \ingroup    mymodule

+ *  \brief      Car with notes on MyObject

+ */

+

+// Load Dolibarr environment

+require '../main.inc.php';

+dol_include_once('/mymodule/class/myobject.class.php');

+dol_include_once('/mymodule/lib/mymodule_myobject.lib.php');

+

+// Load translation files required by the page

+$langs->loadLangs(array("mymodule@mymodule", "companies"));

+

+// Get parameters

+$id = GETPOST('id', 'int');

+$ref        = GETPOST('ref', 'alpha');

+$action = GETPOST('action', 'alpha');

+$cancel     = GETPOST('cancel', 'aZ09');

+$backtopage = GETPOST('backtopage', 'alpha');

+

+// Initialize technical objects

+$object = new MyObject($db);

+$extrafields = new ExtraFields($db);

+$diroutputmassaction = $conf->mymodule->dir_output.'/temp/massgeneration/'.$user->id;

+$hookmanager->initHooks(array('myobjectnote', 'globalcard')); // Note that conf->hooks_modules contains array

+

+// Fetch optionals attributes and labels

+$extrafields->fetch_name_optionals_label($object->table_element);

+

+// Security check - Protection if external user

+//if ($user->socid > 0) accessforbidden();

+//if ($user->socid > 0) $socid = $user->socid;

+//$result = restrictedArea($user, 'mymodule', $id);

+

+// Load object

+include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once  // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals

+if ($id > 0 || !empty($ref)) $upload_dir = $conf->mymodule->multidir_output[$object->entity]."/".$object->id;

+

+$permissionnote = 1;

+//$permissionnote=$user->rights->mymodule->creer;	// Used by the include of actions_setnotes.inc.php

+

+

+

+/*

+ * Actions

+ */

+

+include DOL_DOCUMENT_ROOT.'/core/actions_setnotes.inc.php'; // Must be include, not include_once

+

+

+/*

+ * View

+ */

+

+$form = new Form($db);

+

+//$help_url='EN:Customers_Orders|FR:Commandes_Clients|ES:Pedidos de clientes';

+$help_url = '';

+llxHeader('', $langs->trans('MyObject'), $help_url);

+

+if ($id > 0 || !empty($ref))

+{

+	$object->fetch_thirdparty();

+

+	$head = myobjectPrepareHead($object);

+

+	dol_fiche_head($head, 'note', $langs->trans("MyObject"), -1, 'myobject@mymodule');

+

+	// Object card

+	// ------------------------------------------------------------

+	$linkback = '<a href="'.dol_buildpath('/mymodule/myobject_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';

+

+	$morehtmlref = '<div class="refidno">';

+	/*

+	// Ref customer

+	$morehtmlref.=$form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);

+	$morehtmlref.=$form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);

+	// Thirdparty

+	$morehtmlref.='<br>'.$langs->trans('ThirdParty') . ' : ' . $object->thirdparty->getNomUrl(1);

+	// Project

+	if (! empty($conf->projet->enabled))

+	{

+	    $langs->load("projects");

+	    $morehtmlref.='<br>'.$langs->trans('Project') . ' ';

+	    if ($user->rights->mymodule->creer)

+	    {

+	        if ($action != 'classify')

+	            //$morehtmlref.='<a class="editfielda" href="' . $_SERVER['PHP_SELF'] . '?action=classify&amp;id=' . $object->id . '">' . img_edit($langs->transnoentitiesnoconv('SetProject')) . '</a> : ';

+	            $morehtmlref.=' : ';

+	            if ($action == 'classify') {

+	                //$morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'projectid', 0, 0, 1, 1);

+	                $morehtmlref.='<form method="post" action="'.$_SERVER['PHP_SELF'].'?id='.$object->id.'">';

+	                $morehtmlref.='<input type="hidden" name="action" value="classin">';

+	                $morehtmlref.='<input type="hidden" name="token" value="'.newToken().'">';

+	                $morehtmlref.=$formproject->select_projects($object->socid, $object->fk_project, 'projectid', $maxlength, 0, 1, 0, 1, 0, 0, '', 1);

+	                $morehtmlref.='<input type="submit" class="button valignmiddle" value="'.$langs->trans("Modify").'">';

+	                $morehtmlref.='</form>';

+	            } else {

+	                $morehtmlref.=$form->form_project($_SERVER['PHP_SELF'] . '?id=' . $object->id, $object->socid, $object->fk_project, 'none', 0, 0, 0, 1);

+	            }

+	    } else {

+	        if (! empty($object->fk_project)) {

+	            $proj = new Project($db);

+	            $proj->fetch($object->fk_project);

+	            $morehtmlref.='<a href="'.DOL_URL_ROOT.'/projet/card.php?id=' . $object->fk_project . '" title="' . $langs->trans('ShowProject') . '">';

+	            $morehtmlref.=$proj->ref;

+	            $morehtmlref.='</a>';

+	        } else {

+	            $morehtmlref.='';

+	        }

+	    }

+	}*/

+	$morehtmlref .= '</div>';

+

+

+	dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);

+

+

+	print '<div class="fichecenter">';

+	print '<div class="underbanner clearboth"></div>';

+

+

+	$cssclass = "titlefield";

+	include DOL_DOCUMENT_ROOT.'/core/tpl/notes.tpl.php';

+

+	print '</div>';

+

+	dol_fiche_end();

+}

+

+// End of page

+llxFooter();

+$db->close();

--- /tmp/dsg/dolibarr/htdocs/zapier/github_19.0.3_zapierindex.php
+++ /tmp/dsg/dolibarr/htdocs/zapier/client_zapierindex.php
@@ -0,0 +1,225 @@
+<?php

+/* Copyright (C) 2001-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>

+ * Copyright (C) 2004-2015 Laurent Destailleur  <eldy@users.sourceforge.net>

+ * Copyright (C) 2005-2012 Regis Houssin        <regis.houssin@inodbox.com>

+ * Copyright (C) 2015      Jean-François Ferry	<jfefe@aternatik.fr>

+ *

+ * This program is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 3 of the License, or

+ * (at your option) any later version.

+ *

+ * This program is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ *

+ * You should have received a copy of the GNU General Public License

+ * along with this program. If not, see <http://www.gnu.org/licenses/>.

+ */

+

+/**

+ *	\file       htdocs/zapier/zapierindex.php

+ *	\ingroup    zapier

+ *	\brief      Home page of zapier top menu

+ */

+

+// Load Dolibarr environment

+require '../main.inc.php';

+require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';

+

+// Load translation files required by the page

+$langs->loadLangs(array("zapier@zapier"));

+

+$action = GETPOST('action', 'alpha');

+

+

+// Securite acces client

+if (!$user->rights->zapier->read) accessforbidden();

+$socid = GETPOST('socid', 'int');

+if (isset($user->socid) && $user->socid > 0)

+{

+	$action = '';

+	$socid = $user->socid;

+}

+

+$max = 5;

+$now = dol_now();

+

+

+/*

+ * Actions

+ */

+

+// None

+

+

+/*

+ * View

+ */

+

+$form = new Form($db);

+$formfile = new FormFile($db);

+

+llxHeader("", $langs->trans("ZapierForDolibarrArea"));

+

+print load_fiche_titre($langs->trans("ZapierForDolibarrArea"), '', 'zapier.png@zapier');

+

+print '<div class="fichecenter"><div class="fichethirdleft">';

+

+

+/* BEGIN MODULEBUILDER DRAFT MYOBJECT

+// Draft MyObject

+if (! empty($conf->zapier->enabled) && $user->rights->zapier->read)

+{

+	$langs->load("orders");

+

+	$sql = "SELECT c.rowid, c.ref, c.ref_client, c.total_ht, c.tva as total_tva, c.total_ttc, s.rowid as socid, s.nom as name, s.client, s.canvas";

+    $sql.= ", s.code_client";

+	$sql.= " FROM ".MAIN_DB_PREFIX."commande as c";

+	$sql.= ", ".MAIN_DB_PREFIX."societe as s";

+	if (! $user->rights->societe->client->voir && ! $socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";

+	$sql.= " WHERE c.fk_soc = s.rowid";

+	$sql.= " AND c.fk_statut = 0";

+	$sql.= " AND c.entity IN (".getEntity('commande').")";

+	if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;

+	if ($socid)	$sql.= " AND c.fk_soc = ".$socid;

+

+	$resql = $db->query($sql);

+	if ($resql)

+	{

+		$total = 0;

+		$num = $db->num_rows($resql);

+

+		print '<table class="noborder centpercent">';

+		print '<tr class="liste_titre">';

+		print '<th colspan="3">'.$langs->trans("DraftOrders").($num?'<span class="badge marginleftonlyshort">'.$num.'</span>':'').'</th></tr>';

+

+		$var = true;

+		if ($num > 0)

+		{

+			$i = 0;

+			while ($i < $num)

+			{

+

+				$obj = $db->fetch_object($resql);

+				print '<tr class="oddeven"><td class="nowrap">';

+                $orderstatic->id=$obj->rowid;

+                $orderstatic->ref=$obj->ref;

+                $orderstatic->ref_client=$obj->ref_client;

+                $orderstatic->total_ht = $obj->total_ht;

+                $orderstatic->total_tva = $obj->total_tva;

+                $orderstatic->total_ttc = $obj->total_ttc;

+                print $orderstatic->getNomUrl(1);

+                print '</td>';

+				print '<td class="nowrap">';

+				$companystatic->id=$obj->socid;

+				$companystatic->name=$obj->name;

+				$companystatic->client=$obj->client;

+                $companystatic->code_client = $obj->code_client;

+                $companystatic->code_fournisseur = $obj->code_fournisseur;

+                $companystatic->canvas=$obj->canvas;

+				print $companystatic->getNomUrl(1,'customer',16);

+				print '</td>';

+				print '<td class="right" class="nowrap">'.price($obj->total_ttc).'</td></tr>';

+				$i++;

+				$total += $obj->total_ttc;

+			}

+			if ($total>0)

+			{

+

+				print '<tr class="liste_total"><td>'.$langs->trans("Total").'</td><td colspan="2" class="right">'.price($total)."</td></tr>";

+			}

+		}

+		else

+		{

+

+			print '<tr class="oddeven"><td colspan="3" class="opacitymedium">'.$langs->trans("NoOrder").'</td></tr>';

+		}

+		print "</table><br>";

+

+		$db->free($resql);

+	}

+	else

+	{

+		dol_print_error($db);

+	}

+}

+END MODULEBUILDER DRAFT MYOBJECT */

+

+

+print '</div><div class="fichetwothirdright"><div class="ficheaddleft">';

+

+

+$NBMAX = 3;

+$max = 3;

+

+/* BEGIN MODULEBUILDER LASTMODIFIED MYOBJECT

+// Last modified myobject

+if (! empty($conf->zapier->enabled) && $user->rights->zapier->read)

+{

+	$sql = "SELECT s.rowid, s.nom as name, s.client, s.datec, s.tms, s.canvas";

+    $sql.= ", s.code_client";

+	$sql.= " FROM ".MAIN_DB_PREFIX."societe as s";

+	if (! $user->rights->societe->client->voir && ! $socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";

+	$sql.= " WHERE s.client IN (1, 2, 3)";

+	$sql.= " AND s.entity IN (".getEntity($companystatic->element).")";

+	if (! $user->rights->societe->client->voir && ! $socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id;

+	if ($socid)	$sql.= " AND s.rowid = $socid";

+	$sql .= " ORDER BY s.tms DESC";

+	$sql .= $db->plimit($max, 0);

+

+	$resql = $db->query($sql);

+	if ($resql)

+	{

+		$num = $db->num_rows($resql);

+		$i = 0;

+

+		print '<table class="noborder centpercent">';

+		print '<tr class="liste_titre">';

+		print '<th colspan="2">';

+		if (empty($conf->global->SOCIETE_DISABLE_PROSPECTS) && empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) print $langs->trans("BoxTitleLastCustomersOrProspects",$max);

+        else if (! empty($conf->global->SOCIETE_DISABLE_CUSTOMERS)) print $langs->trans("BoxTitleLastModifiedProspects",$max);

+		else print $langs->trans("BoxTitleLastModifiedCustomers",$max);

+		print '</th>';

+		print '<th class="right">'.$langs->trans("DateModificationShort").'</th>';

+		print '</tr>';

+		if ($num)

+		{

+			while ($i < $num)

+			{

+				$objp = $db->fetch_object($resql);

+				$companystatic->id=$objp->rowid;

+				$companystatic->name=$objp->name;

+				$companystatic->client=$objp->client;

+                $companystatic->code_client = $objp->code_client;

+                $companystatic->code_fournisseur = $objp->code_fournisseur;

+                $companystatic->canvas=$objp->canvas;

+				print '<tr class="oddeven">';

+				print '<td class="nowrap">'.$companystatic->getNomUrl(1,'customer',48).'</td>';

+				print '<td class="right nowrap">';

+				print $companystatic->getLibCustProspStatut();

+				print "</td>";

+				print '<td class="right nowrap">'.dol_print_date($db->jdate($objp->tms),'day')."</td>";

+				print '</tr>';

+				$i++;

+

+

+			}

+

+			$db->free($resql);

+		}

+		else

+		{

+			print '<tr class="oddeven"><td colspan="3" class="opacitymedium">'.$langs->trans("None").'</td></tr>';

+		}

+		print "</table><br>";

+	}

+}

+*/

+

+print '</div></div></div>';

+

+// End of page

+llxFooter();

+$db->close();