31if (!defined(
'NOLOGIN')) {
34if (!defined(
'NOCSRFCHECK')) {
35 define(
"NOCSRFCHECK", 1);
37if (!defined(
'NOIPCHECK')) {
38 define(
'NOIPCHECK',
'1');
40if (!defined(
'NOBROWSERNOTIF')) {
41 define(
'NOBROWSERNOTIF',
'1');
48$entity = (!empty($_GET[
'entity']) ? (int) $_GET[
'entity'] : (!empty($_POST[
'entity']) ? (int) $_POST[
'entity'] : 1));
49if (is_numeric($entity)) {
50 define(
"DOLENTITY", $entity);
54require
'../../main.inc.php';
55require_once DOL_DOCUMENT_ROOT.
'/core/lib/company.lib.php';
56require_once DOL_DOCUMENT_ROOT.
'/core/lib/json.lib.php';
57require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
60require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
65$backtopage =
GETPOST(
'backtopage',
'alpha');
66$action =
GETPOST(
'action',
'aZ09');
69$langs->loadLangs(array(
"members",
"companies",
"install",
"other",
"projects"));
72 print $langs->trans(
"Form for public lead registration has not been enabled");
77$hookmanager->initHooks(array(
'publicnewleadcard',
'globalcard'));
83$user->loadDefaultValues();
86if (empty($conf->project->enabled)) {
102function llxHeaderVierge($title, $head =
"", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
104 global $user, $conf, $langs, $mysoc;
106 top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
108 print
'<body id="mainbody" class="publicnewmemberform">';
111 $urllogo = DOL_URL_ROOT.
'/theme/common/login_logo.png';
113 if (!empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$mysoc->logo_small)) {
114 $urllogo = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/thumbs/'.$mysoc->logo_small);
115 } elseif (!empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$mysoc->logo)) {
116 $urllogo = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/'.$mysoc->logo);
117 } elseif (is_readable(DOL_DOCUMENT_ROOT.
'/theme/dolibarr_logo.svg')) {
118 $urllogo = DOL_URL_ROOT.
'/theme/dolibarr_logo.svg';
121 print
'<div class="center">';
125 print
'<div class="backgreypublicpayment">';
126 print
'<div class="logopublicpayment">';
127 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
131 print
'<div class="poweredbypublicpayment opacitymedium right"><a class="poweredbyhref" href="https://www.dolibarr.org?utm_medium=website&utm_source=poweredby" target="dolibarr" rel="noopener">'.$langs->trans(
"PoweredBy").
'<br><img class="poweredbyimg" src="'.DOL_URL_ROOT.
'/theme/dolibarr_logo.svg" width="80px"></a></div>';
137 print
'<div class="backimagepublicnewlead">';
138 print
'<img id="idPROJECT_IMAGE_PUBLIC_NEWLEAD" src="' .
getDolGlobalString(
'PROJECT_IMAGE_PUBLIC_NEWLEAD').
'">';
144 print
'<div class="divmainbodylarge">';
168$parameters = array();
170$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
176if (empty($reshook) && $action ==
'add') {
184 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Lastname")).
"<br>\n";
188 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Firstname")).
"<br>\n";
192 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Email")).
"<br>\n";
196 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Message")).
"<br>\n";
200 $langs->load(
"errors");
201 $errmsg .= $langs->trans(
"ErrorBadEMail",
GETPOST(
"email")).
"<br>\n";
204 $defaultoppstatus =
getDolGlobalString(
'PROJECT_DEFAULT_OPPORTUNITY_STATUS_FOR_ONLINE_LEAD');
205 if (empty($defaultoppstatus)) {
207 $langs->load(
"errors");
208 $errmsg .= $langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Project")).
"<br>\n";
214 $thirdparty =
new Societe($db);
218 $result = $thirdparty->fetch(0,
'',
'',
'',
'',
'',
'',
'',
'',
'',
GETPOST(
'email'));
220 $proj->socid = $thirdparty->id;
224 $thirdparty->name =
GETPOST(
'societe');
229 $thirdparty->email =
GETPOST(
'email');
230 $thirdparty->address =
GETPOST(
'address');
231 $thirdparty->zip =
GETPOST(
'zip');
232 $thirdparty->town =
GETPOST(
'town');
233 $thirdparty->country_id =
GETPOSTINT(
'country_id');
234 $thirdparty->state_id =
GETPOSTINT(
'state_id');
235 $thirdparty->client = $thirdparty::PROSPECT;
236 $thirdparty->code_client =
'auto';
237 $thirdparty->code_fournisseur =
'auto';
240 $extrafields->fetch_name_optionals_label($thirdparty->table_element);
241 $ret = $extrafields->setOptionalsFromPost(
null, $thirdparty,
'', 1);
245 $errmsg = ($extrafields->error ? $extrafields->error.
'<br>' :
'').implode(
'<br>', $extrafields->errors);
249 $result = $thirdparty->create($user);
252 $errmsg = ($thirdparty->error ? $thirdparty->error.
'<br>' :
'').implode(
'<br>', $thirdparty->errors);
254 $proj->socid = $thirdparty->id;
263 $modele = !
getDolGlobalString(
'PROJECT_ADDON') ?
'mod_project_simple' : $conf->global->PROJECT_ADDON;
269 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
270 foreach ($dirmodels as $reldir) {
271 $file =
dol_buildpath($reldir.
"core/modules/project/".$modele.
'.php', 0);
272 if (file_exists($file)) {
274 $classname = $modele;
281 $modProject =
new $classname();
283 $defaultref = $modProject->getNextValue($thirdparty,
$object);
286 if (is_numeric($defaultref) && $defaultref <= 0) {
290 if (empty($defaultref)) {
291 $defaultref =
'PJ'.dol_print_date(
dol_now(),
'dayrfc');
294 if ($visibility ===
"1") {
296 } elseif ($visibility ===
"0") {
298 } elseif (empty($visibility)) {
302 $proj->ref = $defaultref;
303 $proj->statut = $proj::STATUS_DRAFT;
304 $proj->status = $proj::STATUS_DRAFT;
305 $proj->usage_opportunity = 1;
306 $proj->title = $langs->trans(
"LeadFromPublicForm");
307 $proj->description =
GETPOST(
"description",
"alphanohtml");
308 $proj->opp_status = $defaultoppstatus;
309 $proj->fk_opp_status = $defaultoppstatus;
312 $nb_post_max =
getDolGlobalInt(
"MAIN_SECURITY_MAX_POST_ON_PUBLIC_PAGES_BY_IP_ADDRESS", 200);
316 if ($nb_post_max > 0) {
317 $sql =
"SELECT COUNT(rowid) as nb_projets";
318 $sql .=
" FROM ".MAIN_DB_PREFIX.
"projet";
319 $sql .=
" WHERE ip = '".$db->escape($proj->ip).
"'";
320 $sql .=
" AND datec > '".$db->idate($minmonthpost).
"'";
321 $resql = $db->query($sql);
323 $num = $db->num_rows($resql);
327 $obj = $db->fetch_object($resql);
328 $nb_post_ip = $obj->nb_projets;
334 $extrafields->fetch_name_optionals_label($proj->table_element);
335 $ret = $extrafields->setOptionalsFromPost(
null, $proj);
340 if ($nb_post_max > 0 && $nb_post_ip >= $nb_post_max) {
342 $errmsg = $langs->trans(
"AlreadyTooMuchPostOnThisIPAdress");
343 array_push($proj->errors, $langs->trans(
"AlreadyTooMuchPostOnThisIPAdress"));
347 $result = $proj->create($user);
349 require_once DOL_DOCUMENT_ROOT.
'/core/class/CMailFile.class.php';
357 include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formmail.class.php';
361 $outputlangs->setDefaultLang(empty(
$object->thirdparty->default_lang) ? $mysoc->default_lang :
$object->thirdparty->default_lang);
363 $outputlangs->loadLangs(array(
"main",
"members",
"projects"));
365 $arraydefaultmessage =
null;
368 if (!empty($labeltouse)) {
369 $arraydefaultmessage = $formmail->getEMailTemplate($db,
'project', $user, $outputlangs, 0, 1, $labeltouse);
372 if (!empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0) {
373 $subject = $arraydefaultmessage->topic;
374 $msg = $arraydefaultmessage->content;
376 if (empty($labeltosue)) {
377 $appli = $mysoc->name;
379 $labeltouse =
'['.$appli.
'] '.$langs->trans(
"YourMessage");
380 $msg = $langs->trans(
"YourMessageHasBeenReceived");
387 if ($subjecttosend && $texttosend) {
388 $moreinheader =
'X-Dolibarr-Info: send_an_email by public/lead/new.php'.
"\r\n";
390 $result =
$object->sendEmail($texttosend, $subjecttosend, array(), array(), array(),
"",
"", 0, -1,
'', $moreinheader);
398 if (!empty($backtopage)) {
399 $urlback = $backtopage;
404 $urlback = $_SERVER[
"PHP_SELF"].
"?action=added&token=".
newToken();
407 if (!empty($entity)) {
408 $urlback .=
'&entity='.$entity;
411 dol_syslog(
"project lead ".$proj->ref.
" has been created, we redirect to ".$urlback);
414 $errmsg .= $proj->error.
'<br>'.implode(
'<br>', $proj->errors);
424 header(
"Location: ".$urlback);
433if (empty($reshook) && $action ==
'added') {
438 print
'<div class="center">';
439 print $langs->trans(
"NewLeadbyWeb");
452$form =
new Form($db);
455$extrafields->fetch_name_optionals_label(
$object->table_element);
463print
'<div align="center">';
464print
'<div id="divsubscribe">';
466print
'<div class="center subscriptionformhelptext opacitymedium justify">';
470 print $langs->trans(
"FormForNewLeadDesc",
getDolGlobalString(
"MAIN_INFO_SOCIETE_MAIL")).
"<br>\n";
477print
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST" name="newlead">'.
"\n";
478print
'<input type="hidden" name="token" value="'.newToken().
'" / >';
479print
'<input type="hidden" name="entity" value="'.$entity.
'" />';
480print
'<input type="hidden" name="action" value="add" />';
484print
'<br><span class="opacitymedium">'.$langs->trans(
"FieldsWithAreMandatory",
'*').
'</span><br>';
489print
'<script type="text/javascript">
490jQuery(document).ready(function () {
491 jQuery(document).ready(function () {
492 jQuery("#selectcountry_id").change(function() {
493 document.newlead.action.value="create";
494 document.newlead.submit();
501print
'<table class="border" summary="form to subscribe" id="tablesubscribe">'.
"\n";
504print
'<tr><td>'.$langs->trans(
"Lastname").
' <span class="star">*</span></td><td><input type="text" name="lastname" class="minwidth150" value="'.
dol_escape_htmltag(
GETPOST(
'lastname')).
'" required></td></tr>'.
"\n";
506print
'<tr><td>'.$langs->trans(
"Firstname").
' <span class="star">*</span></td><td><input type="text" name="firstname" class="minwidth150" value="'.
dol_escape_htmltag(
GETPOST(
'firstname')).
'" required></td></tr>'.
"\n";
508print
'<tr><td>'.$langs->trans(
"Email").
' <span class="star">*</span></td><td><input type="text" name="email" maxlength="255" class="minwidth150" value="'.
dol_escape_htmltag(
GETPOST(
'email')).
'" required></td></tr>'.
"\n";
510print
'<tr id="trcompany" class="trcompany"><td>'.$langs->trans(
"Company").
'</td><td><input type="text" name="societe" class="minwidth150" value="'.
dol_escape_htmltag(
GETPOST(
'societe')).
'"></td></tr>'.
"\n";
512print
'<tr><td>'.$langs->trans(
"Address").
'</td><td>'.
"\n";
513print
'<textarea name="address" id="address" wrap="soft" class="quatrevingtpercent" rows="'.ROWS_2.
'">'.
dol_escape_htmltag(
GETPOST(
'address',
'restricthtml'), 0, 1).
'</textarea></td></tr>'.
"\n";
515print
'<tr><td>'.$langs->trans(
'Zip').
' / '.$langs->trans(
'Town').
'</td><td>';
516print $formcompany->select_ziptown(
GETPOST(
'zipcode'),
'zipcode', array(
'town',
'selectcountry_id',
'state_id'), 6, 1);
518print $formcompany->select_ziptown(
GETPOST(
'town'),
'town', array(
'zipcode',
'selectcountry_id',
'state_id'), 0, 1);
521print
'<tr><td>'.$langs->trans(
'Country').
'</td><td>';
522$country_id =
GETPOST(
'country_id');
524 $country_id =
getCountry($conf->global->PROJECT_NEWFORM_FORCECOUNTRYCODE, 2, $db, $langs);
526if (!$country_id && !empty($conf->geoipmaxmind->enabled)) {
530 $new_country_id =
getCountry($country_code, 3, $db, $langs);
532 if ($new_country_id) {
533 $country_id = $new_country_id;
537$country_code =
getCountry($country_id, 2, $db, $langs);
538print $form->select_country($country_id,
'country_id');
542 print
'<tr><td>'.$langs->trans(
'State').
'</td><td>';
544 print $formcompany->select_state(
GETPOSTINT(
"state_id"), $country_code);
552$parameters[
'tpl_context'] =
'public';
553include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_add.tpl.php';
556print
'<td class="tdtop">'.$langs->trans(
"Message").
' <span class="star">*</span></td>';
557print
'<td class="tdtop"><textarea name="description" id="description" wrap="soft" class="quatrevingtpercent" rows="'.ROWS_5.
'" required>'.
dol_escape_htmltag(
GETPOST(
'description',
'restricthtml'), 0, 1).
'</textarea></td>';
565print
'<div class="center">';
566print
'<input type="submit" value="'.$langs->trans(
"Submit").
'" id="submitsave" class="button">';
567if (!empty($backtopage)) {
568 print
' <input type="submit" value="'.$langs->trans(
"Cancel").
'" id="submitcancel" class="button button-cancel">';
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
if(!defined( 'NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined( 'NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) if(!defined( 'NOLOGIN')) if(!defined('NOCSRFCHECK')) if(!defined( 'NOIPCHECK')) llxHeaderVierge()
Header function.
Class to manage projects.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage translations.
llxFooterVierge()
Show footer for new societe.
getCountry($searchkey, $withcode='', $dbtouse=null, $outputlangs=null, $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
load_fiche_titre($title, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
GETPOSTINT($paramname, $method=0)
Return the value of a $_GET or $_POST supervariable, converted into integer.
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
dol_user_country()
Return country code for current user.
dol_get_fiche_end($notab=0)
Return tab footer of a card.
setEventMessage($mesgs, $style='mesgs', $noduplicate=0)
Set event message in dol_events session object.
printCommonFooter($zone='private')
Print common footer : conf->global->MAIN_HTML_FOOTER js for switch of menu hider js for conf->global-...
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
newToken()
Return the value of token currently saved into session with name 'newtoken'.
dolGetFirstLastname($firstname, $lastname, $nameorder=-1)
Return firstname and lastname in correct order.
complete_substitutions_array(&$substitutionarray, $outputlangs, $object=null, $parameters=null, $callfunc="completesubstitutionarray")
Complete the $substitutionarray with more entries coming from external module that had set the "subst...
make_substitutions($text, $substitutionarray, $outputlangs=null, $converttextinhtmlifnecessary=0)
Make substitution into a text string, replacing keys with vals from $substitutionarray (oldval=>newva...
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
isValidEmail($address, $acceptsupervisorkey=0, $acceptuserkey=0)
Return true if email syntax is ok.
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
getUserRemoteIP()
Return the IP of remote user.
dol_htmloutput_errors($mesgstring='', $mesgarray=array(), $keepembedded=0)
Print formatted error messages to output (Used to show messages on html output).
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs=array(), $arrayofcss=array(), $disableforlogin=0, $disablenofollow=0, $disablenoindex=0)
Output html header of a page.
httponly_accessforbidden($message='1', $http_response_code=403, $stringalreadysanitized=0)
Show a message to say access is forbidden and stop program.