20include_once DOL_DOCUMENT_ROOT.
'/core/lib/admin.lib.php';
21if (!class_exists(
'PrestaShopWebservice')) {
22 include_once DOL_DOCUMENT_ROOT.
'/admin/remotestore/class/PSWebServiceLibrary.class.php';
96 $this->url = DOL_URL_ROOT.
'/admin/modules.php?mode=marketplace';
97 $this->shop_url =
'https://www.dolistore.com/index.php?controller=product&id_product=';
98 $this->debug_api = $debug;
100 $langtmp = explode(
'_', $langs->defaultlang);
102 $lang_array = array(
'en' => 1,
'fr' => 2,
'es' => 3,
'it' => 4,
'de' => 5);
103 if (!in_array($lang, array_keys($lang_array))) {
106 $this->lang = $lang_array[$lang];
126 $opt[
'resource'] =
'categories';
127 $opt[
'display'] =
'[id,id_parent,nb_products_recursive,active,is_root_category,name,description]';
128 $opt[
'sort'] =
'id_asc';
131 dol_syslog(
"Call API with opt = ".var_export($opt,
true));
132 $xml = $this->api->get($opt);
134 $this->categories = $xml->categories->children();
137 $trace = $e->getTrace();
138 if ($trace[0][
'args'][0] == 404) {
140 } elseif ($trace[0][
'args'][0] == 401) {
143 print
'Can not access to ' .
getDolGlobalString(
'MAIN_MODULE_DOLISTORE_API_SRV').
'<br>';
144 print $e->getMessage();
156 public function getRemoteProducts($options = array(
'start' => 0,
'end' => 10,
'per_page' => 50,
'categorie' => 0,
'search' =>
''))
160 $this->start = $options[
'start'];
161 $this->end = $options[
'end'];
162 $this->per_page = $options[
'per_page'];
163 $this->categorie = $options[
'categorie'];
164 $this->search = $options[
'search'];
166 if ($this->end == 0) {
167 $this->end = $this->per_page;
177 $opt[
'resource'] =
'products';
181 if ($this->search !=
'') {
182 $opt2[
'url'] =
getDolGlobalString(
'MAIN_MODULE_DOLISTORE_API_SRV') .
'/api/search?query='.$this->search.
'&language='.$this->lang;
185 dol_syslog(
"Call API with opt2 = ".var_export($opt2,
true));
186 $xml = $this->api->get($opt2);
190 foreach ($xml->products->children() as $product) {
191 $products[] = (int) $product[
'id'];
193 $opt[
'filter[id]'] =
'['.implode(
'|', $products).
']';
194 } elseif ($this->categorie != 0) {
196 $opt2[
'resource'] =
'categories';
197 $opt2[
'id'] = $this->categorie;
200 dol_syslog(
"Call API with opt2 = ".var_export($opt2,
true));
201 $xml = $this->api->get($opt2);
205 foreach ($xml->category->associations->products->children() as $product) {
206 $products[] = (int) $product->id;
208 $opt[
'filter[id]'] =
'['.implode(
'|', $products).
']';
210 $opt[
'display'] =
'[id,name,id_default_image,id_category_default,reference,price,condition,show_price,date_add,date_upd,description_short,description,module_version,dolibarr_min,dolibarr_max]';
211 $opt[
'sort'] =
'id_desc';
212 $opt[
'filter[active]'] =
'[1]';
213 $opt[
'limit'] =
"$this->start,$this->end";
217 dol_syslog(
"Call API with opt = ".var_export($opt,
true));
218 $xml = $this->api->get($opt);
220 $this->products = $xml->products->children();
223 $trace = $e->getTrace();
224 if ($trace[0][
'args'][0] == 404) {
226 } elseif ($trace[0][
'args'][0] == 401) {
229 print
'Can not access to ' .
getDolGlobalString(
'MAIN_MODULE_DOLISTORE_API_SRV').
'<br>';
230 print $e->getMessage();
245 if (!isset($this->categories)) {
254 $nbofcateg = count($this->categories);
255 for ($i = 0; $i < $nbofcateg; $i++) {
256 $cat = $this->categories[$i];
258 if ((
string) $cat->name->language[$this->lang - 1] ==
'Goodies') {
262 if ($cat->is_root_category == 1 && $parent == 0) {
263 $html .=
'<li class="root"><h3 class="nomargesupinf marginleftonly"><a class="nomargesupinf link2cat" href="?mode=marketplace&categorie='.((int) $cat->id).
'" ';
264 $html .=
'title="'.dol_escape_htmltag(strip_tags($cat->description->language[$this->lang - 1])).
'">';
266 $html .=
'DoliStore';
267 $html .=
' <span class="opacitymedium small valignmiddle">('.dol_escape_htmltag($cat->nb_products_recursive).
')</span></a></h3>';
270 } elseif (trim($cat->id_parent) == $parent && $cat->active == 1 && trim($cat->id_parent) != 0) {
271 $select = ($cat->id == $this->categorie) ?
' selected' :
'';
272 $html .=
'<li><a class="link2cat'.$select.
'" href="?mode=marketplace&categorie='.((int) $cat->id).
'"';
273 $html .=
' title="'.dol_escape_htmltag(strip_tags($cat->description->language[$this->lang - 1])).
'" ';
274 $html .=
'>'.dol_escape_htmltag($cat->name->language[$this->lang - 1]);
275 $html .=
' <span class="opacitymedium small valignmiddle">('.dol_escape_htmltag($cat->nb_products_recursive).
')</span></a>';
281 if ($html ==
'<ul>') {
285 return $html.
'</ul>';
304 $last_month =
dol_now() - (30 * 24 * 60 * 60);
305 $dolibarrversiontouse = DOL_VERSION;
309 foreach ($this->products as $product) {
311 if ($i > $nbmaxtoshow) {
317 if ($last_month < strtotime($product->date_add)) {
318 $newapp .=
'<span class="newApp">'.$langs->trans(
'New').
'</span> ';
322 if ($last_month < strtotime($product->date_upd) && $newapp ==
'') {
323 $newapp .=
'<span class="updatedApp">'.$langs->trans(
'Updated').
'</span> ';
327 if ($product->id_default_image !=
'') {
328 $image_url = DOL_URL_ROOT.
'/admin/remotestore/ajax/image.php?id_product='.urlencode((
string) (((
int) $product->id))).
'&id_image='.urlencode((
string) (((
int) $product->id_default_image)));
329 $images =
'<a href="'.$image_url.
'" class="documentpreview" target="_blank" rel="noopener noreferrer" mime="image/png" title="'.
dol_escape_htmltag($product->name->language[$this->lang - 1].
', '.$langs->trans(
'Version').
' '.$product->module_version).
'">';
330 $images .=
'<img class="imgstore" src="'.$image_url.
'&quality=home_default" alt="" /></a>';
332 $images =
'<img class="imgstore" src="'.DOL_URL_ROOT.
'/admin/dolistore/img/NoImageAvailable.png" />';
336 if ($product->price > 0) {
337 $price =
'<h3>'.price(
price2num($product->price,
'MT'), 0, $langs, 1, -1, -1,
'EUR').
' '.$langs->trans(
"HT").
'</h3>';
338 $download_link =
'<a target="_blank" href="'.$this->shop_url.urlencode($product->id).
'"><img width="32" src="'.DOL_URL_ROOT.
'/admin/remotestore/img/follow.png" /></a>';
340 $price =
'<h3>'.$langs->trans(
'Free').
'</h3>';
341 $download_link =
'<a class="paddingleft paddingright" target="_blank" href="'.$this->shop_url.urlencode($product->id).
'"><img width="32" src="'.DOL_URL_ROOT.
'/admin/remotestore/img/follow.png" /></a>';
342 $download_link .=
'<a class="paddingleft paddingright" target="_blank" rel="noopener noreferrer" href="'.$this->shop_url.urlencode($product->id).
'"><img width="32" src="'.DOL_URL_ROOT.
'/admin/dolistore/img/Download-128.png" /></a>';
347 if ($this->
version_compare($product->dolibarr_min, $dolibarrversiontouse) <= 0) {
348 if ($this->
version_compare($product->dolibarr_max, $dolibarrversiontouse) >= 0) {
350 $version =
'<span class="compatible">'.$langs->trans(
352 $product->dolibarr_max,
353 $product->dolibarr_min,
354 $product->dolibarr_max
359 $version =
'<span class="notcompatible">'.$langs->trans(
361 $dolibarrversiontouse,
362 $product->dolibarr_min,
363 $product->dolibarr_max
365 $compatible =
'NotCompatible';
369 $version =
'<span class="compatibleafterupdate">'.$langs->trans(
370 'CompatibleAfterUpdate',
371 $dolibarrversiontouse,
372 $product->dolibarr_min,
373 $product->dolibarr_max
375 $compatible =
'NotCompatible';
379 $html .=
'<tr class="app oddeven '.dol_escape_htmltag($compatible).
'">';
380 $html .=
'<td class="center" width="160"><div class="newAppParent">';
381 $html .= $newapp.$images;
382 $html .=
'</div></td>';
383 $html .=
'<td class="margeCote"><h2 class="appTitle">';
385 $html .=
'<br><small>';
387 $html .=
'</small></h2>';
389 $html .=
'<br>'.dol_escape_htmltag(
dol_string_nohtmltag($product->description_short->language[$this->lang - 1]));
392 $html .=
'<td class="margeCote center amount">';
395 $html .=
'<td class="margeCote nowraponall">'.$download_link.
'</td>';
399 if (empty($this->products)) {
400 $html .=
'<tr class=""><td colspan="3" class="center">';
402 $langs->load(
"website");
403 $html .= $langs->trans(
"noResultsWereFound").
'...';
405 $html .=
'</td></tr>';
408 if (count($this->products) > $nbmaxtoshow) {
409 $html .=
'<tr class=""><td colspan="3" class="center">';
411 $html .= $langs->trans(
"ThereIsMoreThanXAnswers", $nbmaxtoshow).
'...';
413 $html .=
'</td></tr>';
429 return '<a href="'.$this->get_previous_url().
'" class="button">'.
dol_escape_htmltag($text).
'</a>';
442 return '<a href="'.$this->get_next_url().
'" class="button">'.
dol_escape_htmltag($text).
'</a>';
454 $param_array = array();
455 if ($this->start < $this->per_page) {
458 $sub = $this->per_page;
460 $param_array[
'start'] = $this->start - $sub;
461 $param_array[
'end'] = $this->end - $sub;
462 if ($this->categorie != 0) {
463 $param_array[
'categorie'] = $this->categorie;
465 $param = http_build_query($param_array);
466 return $this->url.
"&".$param;
478 $param_array = array();
479 if ($this->products !==
null && count($this->products) < $this->per_page) {
482 $add = $this->per_page;
484 $param_array[
'start'] = $this->start + $add;
485 $param_array[
'end'] = $this->end + $add;
486 if ($this->categorie != 0) {
487 $param_array[
'categorie'] = $this->categorie;
489 $param = http_build_query($param_array);
490 return $this->url.
"&".$param;
504 $v1 = explode(
'.', $v1);
505 $v2 = explode(
'.', $v2);
508 $count1 = count($v1);
509 $count2 = count($v2);
510 $maxcount = max($count1, $count2);
511 while ($level < $maxcount) {
512 $operande1 = isset($v1[$level]) ? $v1[$level] :
'x';
513 $operande2 = isset($v2[$level]) ? $v2[$level] :
'x';
515 if (strtoupper($operande1) ==
'X' || strtoupper($operande2) ==
'X' || $operande1 ==
'*' || $operande2 ==
'*') {
518 if ($operande1 < $operande2) {
522 if ($operande1 > $operande2) {
getRemoteCategories()
Load data from remote Dolistore market place.
get_next_url()
get next url
__construct($debug=false)
Constructor.
get_categories($parent=0)
Return tree of Dolistore categories.
get_next_link($text='> >')
get next link
version_compare($v1, $v2)
version compare
get_previous_url()
get previous url
get_products($nbmaxtoshow=10)
Return list of product formatted for output.
get_previous_link($text='<<')
get previous link
getRemoteProducts($options=array('start'=> 0, 'end'=> 10, 'per_page'=> 50, 'categorie'=> 0, 'search'=> ''))
Load data from remote Dolistore market place.
dol_stringtotime($string, $gm=1)
Convert a string date into a GM Timestamps date Warning: YYYY-MM-DDTHH:MM:SS+02:00 (RFC3339) is not s...
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
dol_now($mode='auto')
Return date for now.
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
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...
global $conf
The following vars must be defined: $type2label $form $conf, $lang, The following vars may also be de...