Merge branch 'develop' of git@github.com:Dolibarr/dolibarr.git into develop
This commit is contained in:
commit
ece2d0267f
4 changed files with 117 additions and 17 deletions
|
|
@ -225,7 +225,7 @@ class PrestaShopWebservice
|
|||
* @param string $response String from a CURL response
|
||||
* @return SimpleXMLElement|boolean status_code, response
|
||||
*
|
||||
* @throw PrestaShopWebserviceException
|
||||
* @throws PrestaShopWebserviceException
|
||||
*/
|
||||
protected function parseXML($response)
|
||||
{
|
||||
|
|
@ -257,7 +257,7 @@ class PrestaShopWebservice
|
|||
* @param array $options Options
|
||||
* @return SimpleXMLElement|boolean status_code, response
|
||||
*
|
||||
* @throw PrestaShopWebserviceException
|
||||
* @throws PrestaShopWebserviceException
|
||||
*/
|
||||
public function add($options)
|
||||
{
|
||||
|
|
@ -310,7 +310,7 @@ class PrestaShopWebservice
|
|||
* @param array $options Array representing resource to get.
|
||||
* @return SimpleXMLElement|boolean status_code, response
|
||||
*
|
||||
* @throw PrestaShopWebserviceException
|
||||
* @throws PrestaShopWebserviceException
|
||||
*/
|
||||
public function get($options)
|
||||
{
|
||||
|
|
@ -351,7 +351,7 @@ class PrestaShopWebservice
|
|||
* @param array $options Array representing resource for head request.
|
||||
* @return SimpleXMLElement status_code, response
|
||||
*
|
||||
* @throw PrestaShopWebserviceException
|
||||
* @throws PrestaShopWebserviceException
|
||||
*/
|
||||
public function head($options)
|
||||
{
|
||||
|
|
@ -393,7 +393,7 @@ class PrestaShopWebservice
|
|||
* @param array $options Array representing resource to edit.
|
||||
* @return SimpleXMLElement|boolean status_code, response
|
||||
*
|
||||
* @throw PrestaShopWebserviceException
|
||||
* @throws PrestaShopWebserviceException
|
||||
*/
|
||||
public function edit($options)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2252,16 +2252,17 @@ class ExtraFields
|
|||
if (in_array($key_type, array('date'))) {
|
||||
$dateparamname_start = $keysuffix . 'options_' . $key . $keyprefix . '_start';
|
||||
$dateparamname_end = $keysuffix . 'options_' . $key . $keyprefix . '_end';
|
||||
if (GETPOSTISSET($dateparamname_start . 'year') || GETPOSTISSET($dateparamname_end . 'year')) {
|
||||
|
||||
if (GETPOST($dateparamname_start . 'year') && GETPOST($dateparamname_end . 'year')) {
|
||||
$value_key = array();
|
||||
// values provided as a component year, month, day, etc.
|
||||
if (GETPOSTISSET($dateparamname_start . 'year')) {
|
||||
if (GETPOST($dateparamname_start . 'year')) {
|
||||
$value_key['start'] = dol_mktime(0, 0, 0, GETPOST($dateparamname_start . 'month', 'int'), GETPOST($dateparamname_start . 'day', 'int'), GETPOST($dateparamname_start . 'year', 'int'));
|
||||
}
|
||||
if (GETPOSTISSET($dateparamname_start . 'year')) {
|
||||
if (GETPOST($dateparamname_start . 'year')) {
|
||||
$value_key['end'] = dol_mktime(23, 59, 59, GETPOST($dateparamname_end . 'month', 'int'), GETPOST($dateparamname_end . 'day', 'int'), GETPOST($dateparamname_end . 'year', 'int'));
|
||||
}
|
||||
} elseif (GETPOSTISSET($keysuffix."options_".$key.$keyprefix."year")) {
|
||||
} elseif (GETPOST($keysuffix."options_".$key.$keyprefix."year")) {
|
||||
// Clean parameters
|
||||
$value_key = dol_mktime(12, 0, 0, GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int'));
|
||||
} else {
|
||||
|
|
@ -2270,7 +2271,7 @@ class ExtraFields
|
|||
} elseif (in_array($key_type, array('datetime', 'datetimegmt'))) {
|
||||
$dateparamname_start = $keysuffix . 'options_' . $key . $keyprefix . '_start';
|
||||
$dateparamname_end = $keysuffix . 'options_' . $key . $keyprefix . '_end';
|
||||
if (GETPOSTISSET($dateparamname_start . 'year') && GETPOSTISSET($dateparamname_end . 'year')) {
|
||||
if (GETPOST($dateparamname_start . 'year') && GETPOST($dateparamname_end . 'year')) {
|
||||
// values provided as a date pair (start date + end date), each date being broken down as year, month, day, etc.
|
||||
$dateparamname_end_hour = GETPOST($dateparamname_end . 'hour', 'int') !='-1' ? GETPOST($dateparamname_end . 'hour', 'int') : '23';
|
||||
$dateparamname_end_min = GETPOST($dateparamname_end . 'min', 'int') !='-1' ? GETPOST($dateparamname_end . 'min', 'int') : '59';
|
||||
|
|
@ -2286,7 +2287,7 @@ class ExtraFields
|
|||
'end' => dol_mktime($dateparamname_end_hour, $dateparamname_end_min, $dateparamname_end_sec, GETPOST($dateparamname_end . 'month', 'int'), GETPOST($dateparamname_end . 'day', 'int'), GETPOST($dateparamname_end . 'year', 'int'), 'tzuserrel')
|
||||
);
|
||||
}
|
||||
} elseif (GETPOSTISSET($keysuffix."options_".$key.$keyprefix."year")) {
|
||||
} elseif (GETPOST($keysuffix."options_".$key.$keyprefix."year")) {
|
||||
// Clean parameters
|
||||
if ($key_type == 'datetimegmt') {
|
||||
$value_key = dol_mktime(GETPOST($keysuffix."options_".$key.$keyprefix."hour", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."min", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."sec", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."month", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."day", 'int'), GETPOST($keysuffix."options_".$key.$keyprefix."year", 'int'), 'gmt');
|
||||
|
|
@ -2307,7 +2308,7 @@ class ExtraFields
|
|||
$value_key = GETPOST($keysuffix."options_".$key.$keyprefix);
|
||||
}
|
||||
} elseif (in_array($key_type, array('checkbox', 'chkbxlst'))) {
|
||||
if (!GETPOSTISSET($keysuffix."options_".$key.$keyprefix)) {
|
||||
if (!GETPOST($keysuffix."options_".$key.$keyprefix)) {
|
||||
continue; // Value was not provided, we should not set it.
|
||||
}
|
||||
$value_arr = GETPOST($keysuffix."options_".$key.$keyprefix);
|
||||
|
|
@ -2315,7 +2316,7 @@ class ExtraFields
|
|||
$value_arr = (array) $value_arr;
|
||||
$value_key = implode(',', $value_arr);
|
||||
} elseif (in_array($key_type, array('price', 'double', 'int'))) {
|
||||
if (!GETPOSTISSET($keysuffix."options_".$key.$keyprefix)) {
|
||||
if (!GETPOST($keysuffix."options_".$key.$keyprefix)) {
|
||||
continue; // Value was not provided, we should not set it.
|
||||
}
|
||||
$value_arr = GETPOST($keysuffix."options_".$key.$keyprefix);
|
||||
|
|
@ -2325,19 +2326,19 @@ class ExtraFields
|
|||
$value_key = $value_arr;
|
||||
}
|
||||
} elseif (in_array($key_type, array('boolean'))) {
|
||||
if (!GETPOSTISSET($keysuffix."options_".$key.$keyprefix)) {
|
||||
if (!GETPOST($keysuffix."options_".$key.$keyprefix)) {
|
||||
$value_key = '';
|
||||
} else {
|
||||
$value_arr = GETPOST($keysuffix."options_".$key.$keyprefix);
|
||||
$value_key = $value_arr;
|
||||
}
|
||||
} elseif (in_array($key_type, array('html'))) {
|
||||
if (!GETPOSTISSET($keysuffix."options_".$key.$keyprefix)) {
|
||||
if (!GETPOST($keysuffix."options_".$key.$keyprefix)) {
|
||||
continue; // Value was not provided, we should not set it.
|
||||
}
|
||||
$value_key = dol_htmlcleanlastbr(GETPOST($keysuffix."options_".$key.$keyprefix, 'restricthtml'));
|
||||
} else {
|
||||
if (!GETPOSTISSET($keysuffix."options_".$key.$keyprefix)) {
|
||||
if (!GETPOST($keysuffix."options_".$key.$keyprefix)) {
|
||||
continue; // Value was not provided, we should not set it.
|
||||
}
|
||||
$value_key = GETPOST($keysuffix."options_".$key.$keyprefix);
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ $date_end = dol_mktime(0, 0, 0, GETPOST('projectendmonth', 'int'), GETPOST('proj
|
|||
$date_start_event = dol_mktime(GETPOST('date_start_eventhour', 'int'), GETPOST('date_start_eventmin', 'int'), GETPOST('date_start_eventsec', 'int'), GETPOST('date_start_eventmonth', 'int'), GETPOST('date_start_eventday', 'int'), GETPOST('date_start_eventyear', 'int'));
|
||||
$date_end_event = dol_mktime(GETPOST('date_end_eventhour', 'int'), GETPOST('date_end_eventmin', 'int'), GETPOST('date_end_eventsec', 'int'), GETPOST('date_end_eventmonth', 'int'), GETPOST('date_end_eventday', 'int'), GETPOST('date_end_eventyear', 'int'));
|
||||
$location = GETPOST('location', 'alphanohtml');
|
||||
$fk_project = GETPOST('fk_project', 'int');
|
||||
|
||||
|
||||
$mine = GETPOST('mode') == 'mine' ? 1 : 0;
|
||||
|
|
@ -205,6 +206,7 @@ if (empty($reshook)) {
|
|||
$db->begin();
|
||||
|
||||
$object->ref = GETPOST('ref', 'alphanohtml');
|
||||
$object->fk_project = GETPOST('fk_project', 'int');
|
||||
$object->title = GETPOST('title', 'alphanohtml');
|
||||
$object->socid = GETPOST('socid', 'int');
|
||||
$object->description = GETPOST('description', 'restricthtml'); // Do not use 'alpha' here, we want field as it is
|
||||
|
|
@ -304,6 +306,7 @@ if (empty($reshook)) {
|
|||
$old_start_date = $object->date_start;
|
||||
|
||||
$object->ref = GETPOST('ref', 'alpha');
|
||||
$object->fk_project = GETPOST('fk_project', 'int');
|
||||
$object->title = GETPOST('title', 'alphanohtml'); // Do not use 'alpha' here, we want field as it is
|
||||
$object->statut = GETPOST('status', 'int');
|
||||
$object->socid = GETPOST('socid', 'int');
|
||||
|
|
@ -603,6 +606,14 @@ if ($action == 'create' && $user->hasRight('projet', 'creer')) {
|
|||
// Label
|
||||
print '<tr><td><span class="fieldrequired">'.$langs->trans("Label").'</span></td><td><input class="width500 maxwidth150onsmartphone" type="text" name="title" value="'.dol_escape_htmltag(GETPOST("title", 'alphanohtml')).'" autofocus></td></tr>';
|
||||
|
||||
// Parent
|
||||
if (getDolGlobalInt('PROJECT_ENABLE_SUB_PROJECT')) {
|
||||
print '<tr><td>'.$langs->trans("Parent").'</td><td class="maxwidthonsmartphone">';
|
||||
print img_picto('', 'project', 'class="pictofixedwidth"');
|
||||
$formproject->select_projects(-1, '', 'fk_project', 64, 0, 1, 1, 0, 0, 0, '', 0, 0, '', '', '');
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// Usage (opp, task, bill time, ...)
|
||||
if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES) || empty($conf->global->PROJECT_HIDE_TASKS) || isModEnabled('eventorganization')) {
|
||||
print '<tr><td class="tdtop">';
|
||||
|
|
@ -970,6 +981,14 @@ if ($action == 'create' && $user->hasRight('projet', 'creer')) {
|
|||
print ajax_combobox('status');
|
||||
print '</td></tr>';
|
||||
|
||||
// Parent
|
||||
if (getDolGlobalInt('PROJECT_ENABLE_SUB_PROJECT')) {
|
||||
print '<tr><td>'.$langs->trans("Parent").'</td><td class="maxwidthonsmartphone">';
|
||||
print img_picto('', 'project', 'class="pictofixedwidth"');
|
||||
$formproject->select_projects(-1, $object->fk_project, 'fk_project', 64, 0, 1, 1, 0, 0, 0, '', 0, 0, '', '', '');
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
// Usage
|
||||
if (!empty($conf->global->PROJECT_USE_OPPORTUNITIES) || empty($conf->global->PROJECT_HIDE_TASKS) || isModEnabled('eventorganization')) {
|
||||
print '<tr><td class="tdtop">';
|
||||
|
|
@ -1246,6 +1265,14 @@ if ($action == 'create' && $user->hasRight('projet', 'creer')) {
|
|||
if (!empty($object->thirdparty->id) && $object->thirdparty->id > 0) {
|
||||
$morehtmlref .= $object->thirdparty->getNomUrl(1, 'project');
|
||||
}
|
||||
// Parent
|
||||
if (getDolGlobalInt('PROJECT_ENABLE_SUB_PROJECT')) {
|
||||
if (!empty($object->fk_project) && $object->fk_project) {
|
||||
$parent = new Project($db);
|
||||
$parent->fetch($object->fk_project);
|
||||
$morehtmlref .= $langs->trans("Child of").' '.$parent->getNomUrl(1, 'project').' '.$parent->title;
|
||||
}
|
||||
}
|
||||
$morehtmlref .= '</div>';
|
||||
|
||||
// Define a complementary filter for search of next/prev ref.
|
||||
|
|
@ -1618,6 +1645,41 @@ if ($action == 'create' && $user->hasRight('projet', 'creer')) {
|
|||
print '<div class="fichecenter"><div class="fichehalfleft">';
|
||||
print '<a name="builddoc"></a>'; // ancre
|
||||
|
||||
if (getDolGlobalInt('PROJECT_ENABLE_SUB_PROJECT')) {
|
||||
/*
|
||||
* Sub-projects (children)
|
||||
*/
|
||||
$children = $object->getChildren();
|
||||
if ($children) {
|
||||
print '<table class="centpercent notopnoleftnoright table-fiche-title">';
|
||||
print '<tr class="titre"><td class="nobordernopadding valignmiddle col-title">';
|
||||
print '<div class="titre inline-block">'.$langs->trans('Sub-projects').'</div>';
|
||||
print '</td></tr></table>';
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="centpercent noborder'.($morecss ? ' '.$morecss : '').'">';
|
||||
print '<tr class="liste_titre">';
|
||||
print getTitleFieldOfList('Ref', 0, $_SERVER["PHP_SELF"], '', '', '', '', '', '', '', 1);
|
||||
print getTitleFieldOfList('Title', 0, $_SERVER["PHP_SELF"], '', '', '', '', '', '', '', 1);
|
||||
print getTitleFieldOfList('Status', 0, $_SERVER["PHP_SELF"], '', '', '', '', '', '', '', 1);
|
||||
print '</tr>';
|
||||
print "\n";
|
||||
|
||||
$subproject = new Project($db);
|
||||
foreach ($children as $child) {
|
||||
$subproject->fetch($child->rowid);
|
||||
print '<tr class="oddeven">';
|
||||
print '<td class="nowraponall">'.$subproject->getNomUrl(1, 'project').'</td>';
|
||||
print '<td class="nowraponall tdoverflowmax125">'.$child->title.'</td>';
|
||||
print '<td class="nowraponall">'.$subproject->getLibStatut(5).'</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Generated documents
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -82,6 +82,11 @@ class Project extends CommonObject
|
|||
*/
|
||||
protected $table_ref_field = 'ref';
|
||||
|
||||
/**
|
||||
* @var int parent project
|
||||
*/
|
||||
public $fk_project;
|
||||
|
||||
/**
|
||||
* @var string description
|
||||
*/
|
||||
|
|
@ -291,6 +296,7 @@ class Project extends CommonObject
|
|||
*/
|
||||
public $fields = array(
|
||||
'rowid' =>array('type'=>'integer', 'label'=>'ID', 'enabled'=>1, 'visible'=>-1, 'notnull'=>1, 'position'=>10),
|
||||
'fk_project' =>array('type'=>'integer', 'label'=>'Parent', 'enabled'=>1, 'visible'=>1, 'notnull'=>0, 'position'=>12),
|
||||
'ref' =>array('type'=>'varchar(50)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'showoncombobox'=>1, 'position'=>15, 'searchall'=>1),
|
||||
'title' =>array('type'=>'varchar(255)', 'label'=>'ProjectLabel', 'enabled'=>1, 'visible'=>1, 'notnull'=>1, 'position'=>17, 'showoncombobox'=>2, 'searchall'=>1),
|
||||
'entity' =>array('type'=>'integer', 'label'=>'Entity', 'default'=>1, 'enabled'=>1, 'visible'=>3, 'notnull'=>1, 'position'=>19),
|
||||
|
|
@ -426,6 +432,7 @@ class Project extends CommonObject
|
|||
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."projet (";
|
||||
$sql .= "ref";
|
||||
$sql .= ", fk_project";
|
||||
$sql .= ", title";
|
||||
$sql .= ", description";
|
||||
$sql .= ", fk_soc";
|
||||
|
|
@ -458,6 +465,7 @@ class Project extends CommonObject
|
|||
$sql .= ", ip";
|
||||
$sql .= ") VALUES (";
|
||||
$sql .= "'".$this->db->escape($this->ref)."'";
|
||||
$sql .= ", ".($this->fk_project ? ((int) $this->fk_project) : "null");
|
||||
$sql .= ", '".$this->db->escape($this->title)."'";
|
||||
$sql .= ", '".$this->db->escape($this->description)."'";
|
||||
$sql .= ", ".($this->socid > 0 ? $this->socid : "null");
|
||||
|
|
@ -570,6 +578,7 @@ class Project extends CommonObject
|
|||
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."projet SET";
|
||||
$sql .= " ref='".$this->db->escape($this->ref)."'";
|
||||
$sql .= ", fk_project=".($this->fk_project ? ((int) $this->fk_project) : "null");
|
||||
$sql .= ", title = '".$this->db->escape($this->title)."'";
|
||||
$sql .= ", description = '".$this->db->escape($this->description)."'";
|
||||
$sql .= ", fk_soc = ".($this->socid > 0 ? $this->socid : "null");
|
||||
|
|
@ -680,7 +689,7 @@ class Project extends CommonObject
|
|||
return -1;
|
||||
}
|
||||
|
||||
$sql = "SELECT rowid, entity, ref, title, description, public, datec, opp_amount, budget_amount,";
|
||||
$sql = "SELECT rowid, entity, fk_project, ref, title, description, public, datec, opp_amount, budget_amount,";
|
||||
$sql .= " tms, dateo as date_start, datee as date_end, date_close, fk_soc, fk_user_creat, fk_user_modif, fk_user_close, fk_statut as status, fk_opp_status, opp_percent,";
|
||||
$sql .= " note_private, note_public, model_pdf, usage_opportunity, usage_task, usage_bill_time, usage_organize_event, email_msgid,";
|
||||
$sql .= " accept_conference_suggestions, accept_booth_suggestions, price_registration, price_booth, max_attendees, date_start_event, date_end_event, location, extraparams";
|
||||
|
|
@ -709,6 +718,7 @@ class Project extends CommonObject
|
|||
$this->id = $obj->rowid;
|
||||
$this->entity = $obj->entity;
|
||||
$this->ref = $obj->ref;
|
||||
$this->fk_project = $obj->fk_project;
|
||||
$this->title = $obj->title;
|
||||
$this->description = $obj->description;
|
||||
$this->date_c = $this->db->jdate($obj->datec);
|
||||
|
|
@ -2484,4 +2494,31 @@ class Project extends CommonObject
|
|||
$return .= '</div>';
|
||||
return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return array of sub-projects of the current project
|
||||
*
|
||||
* @return array Children of this project as objects with rowid & title as members
|
||||
*/
|
||||
public function getChildren()
|
||||
{
|
||||
$children = [];
|
||||
$sql = 'SELECT rowid,title';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'projet';
|
||||
$sql .= ' WHERE fk_project = '.((int) $this->id);
|
||||
$sql .= ' ORDER BY title';
|
||||
$result = $this->db->query($sql);
|
||||
if ($result) {
|
||||
$n = $this->db->num_rows($result);
|
||||
while ($n) {
|
||||
$children[] = $this->db->fetch_object($result);
|
||||
$n--;
|
||||
}
|
||||
$this->db->free($result);
|
||||
} else {
|
||||
dol_print_error($this->db);
|
||||
}
|
||||
|
||||
return $children;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue