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.
'/projet/class/project.class.php';
57require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
58require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formcompany.class.php';
59require_once DOL_DOCUMENT_ROOT.
'/core/lib/date.lib.php';
64$backtopage =
GETPOST(
'backtopage',
'alpha');
65$action =
GETPOST(
'action',
'aZ09');
68$langs->loadLangs(array(
"members",
"companies",
"install",
"other",
"projects"));
71 print $langs->trans(
"Form for public lead registration has not been enabled");
76$hookmanager->initHooks(array(
'publicnewleadcard',
'globalcard'));
82$user->loadDefaultValues();
85if (empty($conf->project->enabled)) {
101function llxHeaderVierge($title, $head =
"", $disablejs = 0, $disablehead = 0, $arrayofjs = [], $arrayofcss = [])
103 global $conf, $langs, $mysoc;
105 top_htmlhead($head, $title, $disablejs, $disablehead, $arrayofjs, $arrayofcss);
107 print
'<body id="mainbody" class="publicnewmemberform">';
110 $urllogo = DOL_URL_ROOT.
'/theme/common/login_logo.png';
112 if (!empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.
'/logos/thumbs/'.$mysoc->logo_small)) {
113 $urllogo = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/thumbs/'.$mysoc->logo_small);
114 } elseif (!empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.
'/logos/'.$mysoc->logo)) {
115 $urllogo = DOL_URL_ROOT.
'/viewimage.php?cache=1&modulepart=mycompany&file='.urlencode(
'logos/'.$mysoc->logo);
116 } elseif (is_readable(DOL_DOCUMENT_ROOT.
'/theme/dolibarr_logo.svg')) {
117 $urllogo = DOL_URL_ROOT.
'/theme/dolibarr_logo.svg';
120 print
'<div class="center">';
124 print
'<div class="backgreypublicpayment">';
125 print
'<div class="logopublicpayment">';
126 print
'<img id="dolpaymentlogo" src="'.$urllogo.
'"';
130 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>';
136 print
'<div class="backimagepublicnewlead">';
137 print
'<img id="idPROJECT_IMAGE_PUBLIC_NEWLEAD" src="' .
getDolGlobalString(
'PROJECT_IMAGE_PUBLIC_NEWLEAD').
'">';
143 print
'<div class="divmainbodylarge">';
167$parameters = array();
169$reshook = $hookmanager->executeHooks(
'doActions', $parameters,
$object, $action);
175if (empty($reshook) && $action ==
'add') {
183 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Lastname")).
"<br>\n";
187 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Firstname")).
"<br>\n";
191 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Email")).
"<br>\n";
195 $errmsg .= $langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Message")).
"<br>\n";
199 $langs->load(
"errors");
200 $errmsg .= $langs->trans(
"ErrorBadEMail",
GETPOST(
"email")).
"<br>\n";
203 $defaultoppstatus =
getDolGlobalInt(
'PROJECT_DEFAULT_OPPORTUNITY_STATUS_FOR_ONLINE_LEAD');
204 if (empty($defaultoppstatus)) {
206 $langs->load(
"errors");
207 $errmsg .= $langs->trans(
"ErrorModuleSetupNotComplete", $langs->transnoentitiesnoconv(
"Project")).
"<br>\n";
213 $thirdparty =
new Societe($db);
217 $result = $thirdparty->fetch(0,
'',
'',
'',
'',
'',
'',
'',
'',
'',
GETPOST(
'email'));
219 $proj->socid = $thirdparty->id;
223 $thirdparty->name =
GETPOST(
'societe');
228 $thirdparty->email =
GETPOST(
'email');
229 $thirdparty->address =
GETPOST(
'address');
230 $thirdparty->zip =
GETPOST(
'zip');
231 $thirdparty->town =
GETPOST(
'town');
232 $thirdparty->country_id =
GETPOSTINT(
'country_id');
233 $thirdparty->state_id =
GETPOSTINT(
'state_id');
234 $thirdparty->client = $thirdparty::PROSPECT;
235 $thirdparty->code_client =
'auto';
236 $thirdparty->code_fournisseur =
'auto';
239 $extrafields->fetch_name_optionals_label($thirdparty->table_element);
240 $ret = $extrafields->setOptionalsFromPost(
null, $thirdparty,
'', 1);
243 $errmsg = ($extrafields->error ? $extrafields->error.
'<br>' :
'').implode(
'<br>', $extrafields->errors);
247 $result = $thirdparty->create($user);
250 $errmsg = ($thirdparty->error ? $thirdparty->error.
'<br>' :
'').implode(
'<br>', $thirdparty->errors);
252 $proj->socid = $thirdparty->id;
267 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
268 foreach ($dirmodels as $reldir) {
269 $file =
dol_buildpath($reldir.
"core/modules/project/".$modele.
'.php', 0);
270 if (file_exists($file)) {
272 $classname = $modele;
277 if ($filefound && !empty($classname)) {
279 if (class_exists($classname)) {
280 $modProject =
new $classname();
282 $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);
460print
load_fiche_titre($langs->trans(
"NewContact"),
'',
'', 0,
'',
'center');
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.
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0, $attop=0)
Set event messages in dol_events session object.
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, $attop=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.
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 a 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.