diff --git a/README.md b/README.md index 3c9f74f8e2..99d1b6e858 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,33 @@ -Phraseanet - Digital Asset Management application +Phraseanet 3.5 - Digital Asset Management application ================================================= -#Installation +#Features : -**Nginx** +Metadatas Management (include Thesaurus and DublinCore Mapping) +Search Engine (Sphinx Search Integration) +RestFull APIS (See Developer Documentation http://docs.phraseanet.com/Devel) +Bridge to Youtube/Dailymotion/Flickr +#Documentation : + +http://docs.phraseanet.com + +#Easy Installation + +**Fetch Sources** + +
+
+git clone git://github.com/alchemy-fr/Phraseanet.git Phraseanet
+cd Phraseanet
+./vendors.php
+
+
+ + +**Setup your webserver** + +***Nginx***
 server {
   listen       80;
@@ -15,58 +38,21 @@ server {
 
 
   location /web {
-    alias /home/grosroro/workspace/Phraseanet-Trunk/datas/web;
+    alias /path/to/Phraseanet/datas/web;
   }
   location /download {
     internal;
-    alias /home/grosroro/workspace/Phraseanet-Trunk/tmp/download;
+    alias /path/to/Phraseanet/tmp/download;
   }
   location /lazaret {
     internal;
-    alias /home/grosroro/workspace/Phraseanet-Trunk/tmp/lazaret;
+    alias /path/to/Phraseanet/tmp/lazaret;
   }
 }
 
-#Pimp my install -**xsendfile** -
-  location /protected {
-    internal;
-    alias /home/grosroro/workspace/Phraseanet-Trunk/datas/noweb/;
-  }
-
- -**MP4 pseudo stream** -
-  location /mp4_video {
-    internal;
-    mp4;
-    alias /home/grosroro/workspace/Phraseanet-Trunk/datas/noweb/;
-  }
-
-  location /mp4_videos {
-    secure_download on;
-    secure_download_secret S3cre3t;
-    secure_download_path_mode file;
-
-    if ($secure_download = "-1") {
-      return 403;
-    }
-    if ($secure_download = "-2") {
-      return 403;
-    }
-    if ($secure_download = "-3") {
-      return 500;
-    }
-    rewrite ^/mp4_videos(.*)/[0-9a-zA-Z]*/[0-9a-zA-Z]*$ /mp4_video$1 last;
-  }
-
- -#RESTFULL APIs - -See the [online developer reference] [1] +Let's go ! #License diff --git a/bin/console b/bin/console index ea8fd64e55..8a5fce126e 100755 --- a/bin/console +++ b/bin/console @@ -1,4 +1,4 @@ -#!/usr/bin/php +#!/usr/bin/env php $this->user->get_id() - , ':template_id' => $template_user->get_id() + $sbas_ids = array(); + + foreach ($base_ids as $base_id) + { + $sbas_ids[] = phrasea::sbasFromBas($base_id); + } + + $sbas_ids = array_unique($sbas_ids); + + $sbas_rights = array('bas_manage', 'bas_modify_struct', 'bas_modif_th', 'bas_chupub'); + + $sbas_to_acces = array(); + $rights_to_give = array(); + + foreach ($template_user->ACL()->get_granted_sbas() as $databox) + { + $sbas_id = $databox->get_sbas_id(); + + if (!in_array($sbas_id, $sbas_ids)) + continue; + + + if (!$this->has_access_to_sbas($sbas_id)) + { + $sbas_to_acces[] = $sbas_id; + } + + foreach ($sbas_rights as $right) + { + if ($template_user->ACL()->has_right_on_sbas($sbas_id, $right)) + { + $rights_to_give[$sbas_id][$right] = '1'; + } + } + } + + $this->give_access_to_sbas($sbas_to_acces); + + foreach ($rights_to_give as $sbas_id => $rights) + { + $this->update_rights_to_sbas($sbas_id, $rights); + } + + $bas_rights = array('canputinalbum', 'candwnldhd' + , 'candwnldpreview', 'cancmd' + , 'canadmin', 'actif', 'canreport', 'canpush' + , 'canaddrecord', 'canmodifrecord', 'candeleterecord' + , 'chgstatus', 'imgtools' + , 'manage', 'modify_struct' + , 'nowatermark', 'order_master' ); - $sql = 'INSERT INTO sbasusr - (SELECT distinct null as sbasusr_id, sb.sbas_id, :usr_id as usr_id, bas_manage - , bas_modify_struct,bas_modif_th,bas_chupub - FROM sbasusr sb, bas b - WHERE b.base_id IN (' . implode(', ', $base_ids) . ') - AND b.sbas_id = sb.sbas_id - AND usr_id = :template_id)'; + $bas_to_acces = array(); + $rights_to_give = array(); - $stmt = $this->appbox->get_connection()->prepare($sql); - $stmt->execute($params); - $stmt->closeCursor(); + foreach ($template_user->ACL()->get_granted_base() as $collection) + { + $base_id = $collection->get_base_id(); - $this->delete_data_from_cache(self::CACHE_RIGHTS_SBAS); + if (!in_array($base_id, $base_ids)) + continue; - $sql = "INSERT INTO basusr - (SELECT null as id, base_id, :usr_id as usr_id, canputinalbum - , candwnldhd, candwnldsubdef, candwnldpreview, cancmd - , canadmin, actif, canreport, canpush, now() as creationdate - , basusr_infousr, mask_and, mask_xor, restrict_dwnld - , month_dwnld_max, remain_dwnld, time_limited, limited_from - , limited_to, canaddrecord, canmodifrecord, candeleterecord - , chgstatus, '0000-00-00 00:00:00' as lastconn, imgtools - , manage, modify_struct, bas_manage, bas_modify_struct - , nowatermark, order_master - FROM basusr - WHERE usr_id = - (SELECT usr_id - FROM usr WHERE usr_id = :template_id) - AND base_id IN (" . implode(', ', $base_ids) . "))"; + if (!$this->has_access_to_base($base_id)) + { + $bas_to_acces[] = $base_id; + } - $stmt = $this->appbox->get_connection()->prepare($sql); - $stmt->execute($params); - $stmt->closeCursor(); + foreach ($bas_rights as $right) + { + if ($template_user->ACL()->has_right_on_base($base_id, $right)) + { + $rights_to_give[$base_id][$right] = '1'; + } + } + } - $this->inject_rights(); - $this->delete_data_from_cache(self::CACHE_RIGHTS_BAS); + $this->give_access_to_base($bas_to_acces); + + foreach ($rights_to_give as $sbas_id => $rights) + { + $this->update_rights_to_base($base_id, $rights); + } $this->user->set_last_template($template_user); @@ -315,7 +357,7 @@ class ACL implements cache_cacheableInterface { return false; } - + if (!isset($this->_rights_bas[$base_id][$right])) throw new Exception('right ' . $right . ' does not exists'); @@ -750,7 +792,7 @@ class ACL implements cache_cacheableInterface { if ($this->_rights_bas && $this->_global_rights && is_array($this->_limited)) return $this; - + try { $this->_rights_bas = $this->get_data_from_cache(self::CACHE_RIGHTS_BAS); @@ -1399,12 +1441,12 @@ class ACL implements cache_cacheableInterface $this->load_rights_bas(); $datetime = new DateTime(); - + if (!isset($this->_limited[$base_id])) { return false; } - + $ret = ($this->_limited[$base_id]['dmin'] > $datetime || $this->_limited[$base_id]['dmax'] < $datetime); diff --git a/lib/classes/Controller/Admin/Users.class.php b/lib/classes/Controller/Admin/Users.class.php index 1c7c57437f..7f76233759 100644 --- a/lib/classes/Controller/Admin/Users.class.php +++ b/lib/classes/Controller/Admin/Users.class.php @@ -180,7 +180,7 @@ class Controller_Admin_Users implements ControllerProviderInterface } ); - $controllers->post('/search/', function() use ($app) + $controllers->match('/search/', function() use ($app) { $request = $app['request']; $users = new module_admin_route_users($request); @@ -194,17 +194,14 @@ class Controller_Admin_Users implements ControllerProviderInterface } ); - $controllers->get('/search/', function() use ($app) + $controllers->post('/apply_template/', function() use ($app) { $request = $app['request']; - $users = new module_admin_route_users($request); - $template = 'admin/users.html'; + $users = new module_admin_route_users_edit($request); + + $users->apply_template(); - $twig = new supertwig(); - $twig->addFilter(array('floor' => 'floor')); - $twig->addFilter(array('getDate' => 'phraseadate::getDate')); - - return $twig->render($template, $users->search($request)); + return new Symfony\Component\HttpFoundation\RedirectResponse('/admin/users/search/'); } ); diff --git a/lib/classes/Feed/Entry/Adapter.class.php b/lib/classes/Feed/Entry/Adapter.class.php index 58776f3f3e..ef7c035543 100644 --- a/lib/classes/Feed/Entry/Adapter.class.php +++ b/lib/classes/Feed/Entry/Adapter.class.php @@ -357,6 +357,16 @@ class Feed_Entry_Adapter implements Feed_Entry_Interface, cache_cacheableInterfa return $this->publisher; } + + /** + * + * @param User_adapter $user + * @return boolean + */ + public function is_publisher(User_adapter $user) + { + return $user->get_id() === $this->get_publisher()->get_user()->get_id(); + } /** * diff --git a/lib/classes/PHPShortener.class.php b/lib/classes/PHPShortener.class.php new file mode 100644 index 0000000000..d0d62c8e4d --- /dev/null +++ b/lib/classes/PHPShortener.class.php @@ -0,0 +1,3 @@ +is_authenticated()) return; - $user = User_Adapter::getInstance($this->get_usr_id(), $this->appbox); - $user->ACL()->delete_injected_rights(); + $this->storage()->reset(); $this->close_phrasea_session(); @@ -576,7 +575,7 @@ class Session_Handler $sql = 'SELECT v.id as validate_id, v.usr_id, v.ssel_id , s.usr_id as owner, t.value FROM (validate v, ssel s) - LEFT JOIN tokens t + INNER JOIN tokens t ON (t.datas = s.ssel_id AND v.usr_id=t.usr_id AND t.type="validate") WHERE expires_on < :expires_on @@ -594,7 +593,8 @@ class Session_Handler 'ssel_id' => $row['ssel_id'], 'from' => $row['owner'], 'validate_id' => $row['validate_id'], - 'url' => $registry->get('GV_ServerName') . 'lightbox/validate/'.$row['ssel_id'].'/?LOG=' . $row['value'] + 'url' => $registry->get('GV_ServerName') + . 'lightbox/validate/'.$row['ssel_id'].'/?LOG=' . $row['value'] ); $events_mngr->trigger('__VALIDATION_REMINDER__', $params); diff --git a/lib/classes/User/Adapter.class.php b/lib/classes/User/Adapter.class.php index 3cb03cda7e..1680b2176e 100644 --- a/lib/classes/User/Adapter.class.php +++ b/lib/classes/User/Adapter.class.php @@ -397,9 +397,16 @@ class User_Adapter implements User_Interface, cache_cacheableInterface */ public function set_email($email) { - if (!trim($email)) + if (trim($email) == '') $email = null; + + $test_user = User_Adapter::get_usr_id_from_email($email); + if($test_user && $test_user != $this->get_id()) + { + throw new Exception_InvalidArgument (sprintf(_('A user already exists with email addres %s'), $email)); + } + $sql = 'UPDATE usr SET usr_mail = :new_email WHERE usr_id = :usr_id'; $stmt = $this->appbox->get_connection()->prepare($sql); $stmt->execute(array(':new_email' => $email, ':usr_id' => $this->get_id())); @@ -864,8 +871,16 @@ class User_Adapter implements User_Interface, cache_cacheableInterface return $this->is_template; } + public function get_template_owner() + { + return $this->template_owner; + } + public static function get_usr_id_from_email($email) { + if(is_null($email)) + return false; + $conn = connection::getPDOConnection(); $sql = 'SELECT usr_id FROM usr WHERE usr_mail = :email @@ -1231,6 +1246,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface protected function load_preferences() { if ($this->_prefs) + return $this; $sql = 'SELECT prop, value FROM usr_settings WHERE usr_id= :id'; $stmt = $this->appbox->get_connection()->prepare($sql); @@ -1324,7 +1340,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface } catch (Exception $e) { - + } return $this; @@ -1556,6 +1572,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface $appbox = appbox::get_instance(); $session = $appbox->get_session(); if (!$session->is_authenticated()) + return; $ses_id = $session->get_ses_id(); @@ -1614,7 +1631,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface } catch (Exception $e) { - + } } } @@ -1678,7 +1695,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface } catch (Exception $e) { - + } return false; @@ -1765,7 +1782,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface } catch (Exception $e) { - + } return $locale; @@ -1831,6 +1848,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface public function get_nonce() { if ($this->nonce) + return $this->nonce; $nonce = false; @@ -1848,6 +1866,7 @@ class User_Adapter implements User_Interface, cache_cacheableInterface return $this->nonce; } + public function __sleep() { $vars = array(); diff --git a/lib/classes/User/Query.class.php b/lib/classes/User/Query.class.php index 16a73a413a..4794c485c2 100644 --- a/lib/classes/User/Query.class.php +++ b/lib/classes/User/Query.class.php @@ -88,6 +88,11 @@ class User_Query implements User_QueryInterface * @var boolean */ protected $include_templates = false; + /** + * + * @var boolean + */ + protected $only_templates = false; /** * * @var Array @@ -123,10 +128,10 @@ class User_Query implements User_QueryInterface const SORT_FIRSTNAME= 'usr_prenom'; const SORT_LASTNAME= 'usr_nom'; const SORT_COMPANY = 'societe'; - const SORT_LOGIN = 'login'; + const SORT_LOGIN = 'usr_login'; const SORT_EMAIL = 'usr_mail'; const SORT_ID = 'usr_id'; - const SORT_CREATIONDATE = 'creationdate'; + const SORT_CREATIONDATE = 'usr_creationdate'; const SORT_COUNTRY = 'pays'; const SORT_LASTMODEL = 'lastModel'; @@ -191,18 +196,22 @@ class User_Query implements User_QueryInterface $sql .= ' AND usr_login NOT LIKE "(#deleted_%" '; - if ($this->include_invite) + if (!$this->include_invite) { $sql .= ' AND usr.invite=0 '; } - if ($this->include_templates === false) + if ($this->only_templates === true) + { + $sql .= ' AND model_of = ' . $session->get_usr_id(); + } + elseif ($this->include_templates === false) { $sql .= ' AND model_of=0'; } else { - $sql .= ' AND (model_of=0 OR model_of= ' . $session->get_usr_id() . ' ) '; + $sql .= ' AND (model_of=0 OR model_of = ' . $session->get_usr_id() . ' ) '; } $baslist = array(); @@ -355,6 +364,17 @@ class User_Query implements User_QueryInterface return $this; } + /** + * + * @param boolean $boolean + * @return User_Query + */ + public function only_templates($boolean) + { + $this->only_templates = !!$boolean; + + return $this; + } /** * @@ -390,6 +410,8 @@ class User_Query implements User_QueryInterface case self::SORT_COMPANY: case self::SORT_LOGIN: case self::SORT_EMAIL: + $sorter[$k] = ' usr.`' . $sort . '` COLLATE utf8_unicode_ci '; + break; case self::SORT_ID: case self::SORT_CREATIONDATE: case self::SORT_COUNTRY: @@ -410,7 +432,7 @@ class User_Query implements User_QueryInterface $sorter[$k] .= ' ASC '; break; case self::ORD_DESC: - $sorter[$k] .= ' ASC '; + $sorter[$k] .= ' DESC '; break; } } diff --git a/lib/classes/bootstrap.class.php b/lib/classes/bootstrap.class.php index 9459406188..57febb4c58 100644 --- a/lib/classes/bootstrap.class.php +++ b/lib/classes/bootstrap.class.php @@ -162,6 +162,7 @@ class bootstrap $loader->registerNamespaces(array( 'Symfony\\Component\\Yaml' => __LIBDIR__ . '/vendor/symfony/src', 'Symfony\\Component\\Console' => __LIBDIR__ . '/vendor/symfony/src', + 'Symfony\\Component\\BrowserKit' => __LIBDIR__ . '/vendor/symfony/src', )); $loader->register(); diff --git a/lib/classes/caption/field.class.php b/lib/classes/caption/field.class.php index 5cf9917ae2..1b343b8e9f 100644 --- a/lib/classes/caption/field.class.php +++ b/lib/classes/caption/field.class.php @@ -206,6 +206,9 @@ class caption_field implements cache_cacheableInterface */ protected static function serialize_value(Array $value, $separator) { + if(strlen($separator) > 1) + $separator = $separator[0]; + if (trim($separator) === '') $separator = ' '; else @@ -346,9 +349,9 @@ class caption_field implements cache_cacheableInterface if ($this->databox_field->is_multi() === true) { if ($as_string === true && $custom_separator === false) - + { return $this->value; - + } $separator = $this->databox_field->get_separator(); $array_values = self::get_multi_values($this->value, $separator); diff --git a/lib/classes/caption/record.class.php b/lib/classes/caption/record.class.php index fd608c404f..c5073e43f2 100644 --- a/lib/classes/caption/record.class.php +++ b/lib/classes/caption/record.class.php @@ -59,8 +59,7 @@ class caption_record implements caption_interface, cache_cacheableInterface protected function retrieve_fields() { - if(is_array($this->fields)) - + if (is_array($this->fields)) return $this->fields; $fields = array(); @@ -97,7 +96,7 @@ class caption_record implements caption_interface, cache_cacheableInterface } catch (Exception $e) { - + } } $this->fields = $rec_fields; @@ -134,7 +133,6 @@ class caption_record implements caption_interface, cache_cacheableInterface { $fields = $this->retrieve_fields(); if (isset($this->dces_elements[$label])) - return $fields[$this->dces_elements[$label]]; return null; } @@ -172,7 +170,10 @@ class caption_record implements caption_interface, cache_cacheableInterface , $field->highlight_thesaurus() ); - $fields[$field->get_name()] = $value; + $fields[$field->get_name()] = array( + 'value' => $value + , 'separator' => $field->get_databox_field()->get_separator() + ); } if ($searchEngine instanceof searchEngine_adapter) @@ -185,7 +186,7 @@ class caption_record implements caption_interface, cache_cacheableInterface foreach ($fields as $key => $value) { - $fields[$key] = $ret[$n]; + $fields[$key]['value'] = $ret[$n]; $n++; } } diff --git a/lib/classes/databox.class.php b/lib/classes/databox.class.php index c42bdb4268..7ac6ee415f 100644 --- a/lib/classes/databox.class.php +++ b/lib/classes/databox.class.php @@ -142,7 +142,7 @@ class databox extends base } catch (Exception $e) { - + } } @@ -157,7 +157,7 @@ class databox extends base } catch (Exception $e) { - + } $conn = connection::getPDOConnection(); @@ -277,6 +277,7 @@ class databox extends base SUM(1) AS n, SUM(size) AS siz FROM (record, subdef) LEFT JOIN coll ON record.coll_id=coll.coll_id WHERE record.record_id = subdef.record_id + GROUP BY record.coll_id, name UNION SELECT coll.coll_id, 0, asciiname, '_' AS name, 0 AS n, 0 AS siz FROM coll LEFT JOIN record ON record.coll_id=coll.coll_id @@ -450,7 +451,6 @@ class databox extends base $stmt->closeCursor(); if ($row) - return self::get_instance((int) $row['sbas_id']); try @@ -463,7 +463,7 @@ class databox extends base } catch (Exception $e) { - + } $sql = 'USE `' . $dbname . '`'; @@ -575,7 +575,6 @@ class databox extends base public function get_meta_structure() { if ($this->meta_struct) - return $this->meta_struct; try @@ -698,7 +697,6 @@ class databox extends base } } if ($n > $limit) - return true; return false; @@ -959,16 +957,25 @@ class databox extends base } $this->saveStructure($dom_struct); - $type = isset($field['type']) ? $field['type'] : 'text'; - $type = in_array($type, array(databox_field::TYPE_DATE, databox_field::TYPE_NUMBER, databox_field::TYPE_TEXT)) ? $type : databox_field::TYPE_TEXT; + $type = isset($field['type']) ? $field['type'] : 'string'; + $type = in_array($type + , array( + databox_field::TYPE_DATE + , databox_field::TYPE_NUMBER + , databox_field::TYPE_STRING + , databox_field::TYPE_TEXT + ) + ) ? $type : databox_field::TYPE_STRING; $meta_struct_field = databox_field::create($this, $fname); $meta_struct_field ->set_readonly(isset($field['readonly']) ? $field['readonly'] : 0) ->set_indexable(isset($field['index']) ? $field['index'] : '1') + ->set_separator(isset($field['separator']) ? $field['separator'] : '') + ->set_required((isset($field['required']) && $field['required'] == 1)) ->set_type($type) ->set_tbranch(isset($field['tbranch']) ? $field['tbranch'] : '') - ->set_thumbtitle(isset($field['thumbtitle']) ? $field['thumbtitle'] : '0') + ->set_thumbtitle(isset($field['thumbtitle']) ? $field['thumbtitle'] : (isset($field['thumbTitle']) ? $field['thumbTitle'] : '0')) ->set_multi(isset($field['multi']) ? $field['multi'] : 0) ->set_report(isset($field['report']) ? $field['report'] : '1') ->save(); @@ -979,7 +986,7 @@ class databox extends base } catch (Exception $e) { - + } if (isset($field['regname'])) @@ -1213,7 +1220,6 @@ class databox extends base public function get_structure() { if ($this->structure) - return $this->structure; $this->structure = $this->retrieve_structure(); @@ -1228,7 +1234,7 @@ class databox extends base } catch (Exception $e) { - + } $structure = null; @@ -1254,7 +1260,6 @@ class databox extends base public function get_cterms() { if ($this->cterms) - return $this->cterms; $sql = "SELECT value FROM pref WHERE prop='cterms'"; @@ -1421,7 +1426,6 @@ class databox extends base public function get_cgus() { if ($this->cgus) - return $this->cgus; $this->load_cgus(); @@ -1439,7 +1443,7 @@ class databox extends base } catch (Exception $e) { - + } $sql = 'SELECT value, locale, updated_on FROM pref WHERE prop ="ToU"'; diff --git a/lib/classes/databox/field.class.php b/lib/classes/databox/field.class.php index 6020ae701b..7f36cab930 100644 --- a/lib/classes/databox/field.class.php +++ b/lib/classes/databox/field.class.php @@ -124,6 +124,7 @@ class databox_field implements cache_cacheableInterface const TYPE_TEXT = "text"; const TYPE_DATE = "date"; + const TYPE_STRING = "string"; const TYPE_NUMBER = "number"; /** @@ -176,7 +177,7 @@ class databox_field implements cache_cacheableInterface $this->required = !!$row['required']; $this->multi = !!$row['multi']; $this->report = !!$row['report']; - $this->type = $row['type']; + $this->type = $row['type'] ?: self::TYPE_STRING; $this->tbranch = $row['tbranch']; if ($row['dces_element']) { @@ -269,7 +270,21 @@ class databox_field implements cache_cacheableInterface $stmt->execute(array(':id' => $this->get_id())); $stmt->closeCursor(); + $dom_struct = $this->databox->get_dom_structure(); + $xp_struct = $this->databox->get_xpath_structure(); + + $nodes = $xp_struct->query( + '/record/description/*[@meta_id=' . $this->id . ']' + ); + + foreach($nodes as $node) + { + /* @var $node DOMNode */ + $node->parentNode->removeChild($node); + } + $this->delete_data_from_cache(); + $this->databox->saveStructure($dom_struct); return; } @@ -537,6 +552,9 @@ class databox_field implements cache_cacheableInterface */ public function set_separator($separator) { + if (strpos($separator, ';') === false) + $separator .= ';'; + $this->separator = $separator; return $this; diff --git a/lib/classes/mail.class.php b/lib/classes/mail.class.php index 59bd8d00c0..ab04900fad 100644 --- a/lib/classes/mail.class.php +++ b/lib/classes/mail.class.php @@ -255,8 +255,7 @@ class mail $mail->ConfirmReadingTo = $reading_confirm_to; } - $mail->MsgHTML(strip_tags($body)); -// $mail->MsgHTML(p4string::cleanTags($body)); + $mail->MsgHTML(strip_tags($body, '

')); foreach ($files as $f) { diff --git a/lib/classes/module/admin/route/users.class.php b/lib/classes/module/admin/route/users.class.php index d7c5b1b88f..eefd77e8a8 100644 --- a/lib/classes/module/admin/route/users.class.php +++ b/lib/classes/module/admin/route/users.class.php @@ -106,12 +106,19 @@ class module_admin_route_users if (is_null($v)) $this->query_parms[$k] = false; } + + + $query = new User_Query($appbox); + $templates = $query + ->only_templates(true) + ->execute()->get_results(); return array( 'users' => $this->results, 'parm' => $this->query_parms, 'invite_user' => $invite, - 'autoregister_user' => $autoregister + 'autoregister_user' => $autoregister, + 'templates' => $templates ); } diff --git a/lib/classes/module/admin/route/users/edit.class.php b/lib/classes/module/admin/route/users/edit.class.php index c8f3472889..b9161d94ae 100644 --- a/lib/classes/module/admin/route/users/edit.class.php +++ b/lib/classes/module/admin/route/users/edit.class.php @@ -536,6 +536,13 @@ class module_admin_route_users_edit return $this; } + $user = User_adapter::getInstance(array_pop($this->users), appbox::get_instance()); + + if ($user->is_template()) + { + return $this; + } + $appbox = appbox::get_instance(); $session = $appbox->get_session(); $request = http_request::getInstance(); @@ -580,6 +587,36 @@ class module_admin_route_users_edit return $this; } + public function apply_template() + { + $appbox = appbox::get_instance(); + $session = $appbox->get_session(); + + $template = \User_adapter::getInstance($this->request->get('template'), $appbox); + + if ($template->get_template_owner()->get_id() != $session->get_usr_id()) + { + throw new \Exception_Forbidden('You are not the owner of the template'); + } + + $current_user = \User_adapter::getInstance($session->get_usr_id(), $appbox); + $base_ids = array_keys($current_user->ACL()->get_granted_base(array('canadmin'))); + + foreach ($this->users as $usr_id) + { + $user = \User_adapter::getInstance($usr_id, $appbox); + + if($user->is_template()) + { + continue; + } + + $user->ACL()->apply_model($template, $base_ids); + } + + return $this; + } + public function apply_quotas() { $this->base_id = (int) $this->request->get('base_id'); diff --git a/lib/classes/module/api/V1.php b/lib/classes/module/api/V1.php index 1e9398f30c..eec372c476 100644 --- a/lib/classes/module/api/V1.php +++ b/lib/classes/module/api/V1.php @@ -148,9 +148,9 @@ $app->before(function($request) use ($app) return; } - catch (Exception $e) + catch (\Exception $e) { - + } } $auth = new Session_Authentication_None($app['p4user']); diff --git a/lib/classes/module/console/systemUpgrade.class.php b/lib/classes/module/console/systemUpgrade.class.php index 529d15c3c7..22d62f2a66 100644 --- a/lib/classes/module/console/systemUpgrade.class.php +++ b/lib/classes/module/console/systemUpgrade.class.php @@ -36,9 +36,44 @@ class module_console_systemUpgrade extends Command public function execute(InputInterface $input, OutputInterface $output) { - if(!setup::is_installed()) + if (!setup::is_installed()) { - throw new RuntimeException('Phraseanet is not set up'); + + if (file_exists(dirname(__FILE__) . "/../../../../config/connexion.inc") + && !file_exists(dirname(__FILE__) . "/../../../../config/config.inc") + && file_exists(dirname(__FILE__) . "/../../../../config/_GV.php")) + { + + $output->writeln('This version of Phraseanet requires a config/config.inc'); + $output->writeln('Would you like it to be created based on your settings ?'); + + $dialog = $this->getHelperSet()->get('dialog'); + do + { + $continue = mb_strtolower($dialog->ask($output, '' . _('Create automatically') . ' (Y/n)', 'y')); + } + while (!in_array($continue, array('y', 'n'))); + + if ($continue == 'y') + { + require __DIR__ . "/../../../../config/_GV.php"; + + $datas = 'write('Upgrading...', true); $appbox = appbox::get_instance(); - - if(count(User_Adapter::get_wrong_email_users($appbox)) > 0) + + if (count(User_Adapter::get_wrong_email_users($appbox)) > 0) { return $output->writeln(sprintf('You have to fix your database before upgrade with the system:mailCheck command ')); } - + $upgrader = new Setup_Upgrade($appbox); $advices = $appbox->forceUpgrade($upgrader); } diff --git a/lib/classes/module/prod.class.php b/lib/classes/module/prod.class.php index ac3d52fed7..4c6757d98a 100644 --- a/lib/classes/module/prod.class.php +++ b/lib/classes/module/prod.class.php @@ -49,7 +49,7 @@ class module_prod 'sbas_id' => $sbas_id ); - foreach($user->ACL()->get_granted_base(array(), array($databox->get_sbas_id())) as $coll) + foreach ($user->ACL()->get_granted_base(array(), array($databox->get_sbas_id())) as $coll) { $selected = ($searchSet && isset($searchSet->bases) && @@ -75,12 +75,19 @@ class module_prod else $dates[$id] = array('sbas' => array($sbas_id), 'fieldname' => $name); } + + if (isset($fields[$name])) + { + $fields[$name]['sbas'][] = $sbas_id; + } else { - if (isset($fields[$name])) - $fields[$name]['sbas'][] = $sbas_id; - else - $fields[$name] = array('sbas' => array($sbas_id), 'fieldname' => $name, 'id' => $id); + $fields[$name] = array( + 'sbas' => array($sbas_id) + , 'fieldname' => $name + , 'type' => $meta->get_type() + , 'id' => $id + ); } } diff --git a/lib/classes/random.class.php b/lib/classes/random.class.php index a3b03f91fa..21f692c70d 100644 --- a/lib/classes/random.class.php +++ b/lib/classes/random.class.php @@ -56,7 +56,7 @@ class random } } - $sql = 'DELETE FROM tokens WHERE expire_on < :date'; + $sql = 'DELETE FROM tokens WHERE expire_on < :date and type="download"'; $stmt = $conn->prepare($sql); $stmt->execute(array(':date' => $date)); $stmt->closeCursor(); @@ -201,7 +201,9 @@ class random self::cleanTokens(); $conn = connection::getPDOConnection(); - $sql = 'SELECT * FROM tokens WHERE value = :token '; + $sql = 'SELECT * FROM tokens + WHERE value = :token + AND (expire_on > NOW() OR expire_on IS NULL)'; $stmt = $conn->prepare($sql); $stmt->execute(array(':token' => $token)); $row = $stmt->fetch(PDO::FETCH_ASSOC); diff --git a/lib/classes/record/adapter.class.php b/lib/classes/record/adapter.class.php index 1167f5144b..0614dd0f32 100644 --- a/lib/classes/record/adapter.class.php +++ b/lib/classes/record/adapter.class.php @@ -180,7 +180,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface } catch (Exception $e) { - + } $connbas = $this->databox->get_connection(); @@ -530,7 +530,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface } catch (Exception $e) { - + } return null; @@ -580,7 +580,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface } catch (Exception $e) { - + } $sql = 'SELECT BIN(status) as status FROM record WHERE record_id = :record_id'; @@ -617,7 +617,6 @@ class record_adapter implements record_Interface, cache_cacheableInterface throw new Exception_Media_SubdefNotFound (); if (isset($this->subdefs[$name])) - return $this->subdefs[$name]; if (!$this->subdefs) @@ -658,7 +657,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface } catch (Exception $e) { - + } $connbas = $this->get_databox()->get_connection(); @@ -757,10 +756,8 @@ class record_adapter implements record_Interface, cache_cacheableInterface if ($data) { if (isset($this->technical_datas[$data])) - return $this->technical_datas[$data]; else - return false; } @@ -873,9 +870,9 @@ class record_adapter implements record_Interface, cache_cacheableInterface $titles = array(); foreach ($retrieved_fields as $key => $value) { - if (trim($value === '')) + if (trim($value['value'] === '')) continue; - $titles[] = $value; + $titles[] = $value['value']; } $title = trim(implode(' - ', $titles)); } @@ -951,7 +948,6 @@ class record_adapter implements record_Interface, cache_cacheableInterface $base_url = ''; $original_file = $subdef_def = false; - $subdefs = $this->get_databox()->get_subdef_structure(); foreach ($subdefs as $type => $datas) @@ -972,7 +968,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface try { $value = $this->get_subdef($name); - $original_file = p4string::addEndSlash($value['path']) . $value['file']; + $original_file = p4string::addEndSlash($value->get_path()) . $value->get_file(); unlink($original_file); } catch (Exception $e) @@ -987,7 +983,9 @@ class record_adapter implements record_Interface, cache_cacheableInterface if (trim($subdef_def->get_baseurl()) !== '') { $base_url = str_replace( - array((string) $subdef_def->get_path(), $newfilename), array((string) $subdef_def->get_baseurl(), ''), $path_file_dest + array((string) $subdef_def->get_path(), $newfilename) + , array((string) $subdef_def->get_baseurl(), '') + , $path_file_dest ); } @@ -997,7 +995,12 @@ class record_adapter implements record_Interface, cache_cacheableInterface $sql = 'DELETE FROM subdef WHERE record_id= :record_id AND name=:name'; $stmt = $connbas->prepare($sql); - $stmt->execute(array(':record_id' => $this->record_id, ':name' => $name)); + $stmt->execute( + array( + ':record_id' => $this->record_id + , ':name' => $name + ) + ); $registry = registry::get_instance(); @@ -1032,7 +1035,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface $sql = 'UPDATE record SET moddate=NOW() WHERE record_id=:record_id'; $stmt = $connbas->prepare($sql); - $stmt->bindParam(':record_id', $this->get_record_id()); + $stmt->execute(array(':record_id' => $this->get_record_id())); $stmt->execute(); $this->delete_data_from_cache(self::CACHE_SUBDEFS); @@ -1242,7 +1245,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface } catch (Exception $e) { - + } $this->delete_data_from_cache(self::CACHE_STATUS); @@ -1257,7 +1260,6 @@ class record_adapter implements record_Interface, cache_cacheableInterface public function get_reg_name() { if (!$this->is_grouping()) - return false; $balisename = ''; @@ -1296,14 +1298,12 @@ class record_adapter implements record_Interface, cache_cacheableInterface $registry = registry::get_instance(); if ($this->bitly_link !== null) - return $this->bitly_link; $this->bitly_link = false; if (trim($registry->get('GV_bitly_user')) == '' && trim($registry->get('GV_bitly_key')) == '') - return $this->bitly_link; try @@ -1356,7 +1356,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface else { $uuid = $system_file->read_uuid(); - if(!uuid::is_valid($uuid)) + if (!uuid::is_valid($uuid)) { $uuid = uuid::generate_v4(); } @@ -1504,7 +1504,6 @@ class record_adapter implements record_Interface, cache_cacheableInterface { $hd = $this->get_subdef('document'); if ($hd->is_physically_present()) - return new system_file(p4string::addEndSlash($hd->get_path()) . $hd->get_file()); return null; } @@ -1730,7 +1729,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface } catch (Exception $e) { - + } $this->delete_data_from_cache(self::CACHE_SUBDEFS); } @@ -1824,7 +1823,7 @@ class record_adapter implements record_Interface, cache_cacheableInterface } catch (Exception $e) { - + } } @@ -1844,7 +1843,6 @@ class record_adapter implements record_Interface, cache_cacheableInterface public function get_container_baskets() { if ($this->container_basket) - return $this->container_basket; $appbox = appbox::get_instance(); diff --git a/lib/classes/searchEngine/adapter/phrasea/engine.class.php b/lib/classes/searchEngine/adapter/phrasea/engine.class.php index 4123f26a1b..416f5f0446 100644 --- a/lib/classes/searchEngine/adapter/phrasea/engine.class.php +++ b/lib/classes/searchEngine/adapter/phrasea/engine.class.php @@ -56,7 +56,7 @@ class searchEngine_adapter_phrasea_engine extends searchEngine_adapter_abstract /** * - * @var boolean + * @var searchEngine_options */ protected $options = false; @@ -142,6 +142,8 @@ class searchEngine_adapter_phrasea_engine extends searchEngine_adapter_abstract */ public function set_options(searchEngine_options $options) { + $this->options = $options; + $this->opt_search_type = (int) $options->get_search_type(); $this->opt_bases = $options->get_bases(); $this->opt_fields = $options->get_fields(); @@ -394,34 +396,37 @@ class searchEngine_adapter_phrasea_engine extends searchEngine_adapter_abstract $total_time = 0; + $sort = ''; + + if($this->options->get_sortby()) + { + switch($this->options->get_sortord()) + { + case searchEngine_options::SORT_MODE_ASC: + $sort = '+'; + break; + case searchEngine_options::SORT_MODE_DESC: + default: + $sort = '-'; + break; + } + $sort .= '0' . $this->options->get_sortby(); + } + foreach ($this->queries as $sbas_id => $qry) { - if ($this->opt_search_type == 1) - { - $this->results[$sbas_id] = phrasea_query2( - $session->get_ses_id() - , $sbas_id - , $this->colls[$sbas_id] - , $this->arrayq[$sbas_id] - , $registry->get('GV_sit') - , (string) $session->get_usr_id() - , false - , PHRASEA_MULTIDOC_REGONLY - ); - } - else - { - $this->results[$sbas_id] = phrasea_query2( - $session->get_ses_id() - , $sbas_id - , $this->colls[$sbas_id] - , $this->arrayq[$sbas_id] - , $registry->get('GV_sit') - , (string) $session->get_usr_id() - , false - , PHRASEA_MULTIDOC_DOCONLY - ); - } + $this->results[$sbas_id] = phrasea_query2( + $session->get_ses_id() + , $sbas_id + , $this->colls[$sbas_id] + , $this->arrayq[$sbas_id] + , $registry->get('GV_sit') + , (string) $session->get_usr_id() + , false + , $this->opt_search_type == 1 ? PHRASEA_MULTIDOC_REGONLY : PHRASEA_MULTIDOC_DOCONLY + , $sort + ); + $total_time += $this->results[$sbas_id]['time_all']; if ($this->results[$sbas_id]) @@ -634,9 +639,20 @@ class searchEngine_adapter_phrasea_engine extends searchEngine_adapter_abstract foreach ($fields as $name => $field) { if ($sxe->description->$name) - $ret[] = str_replace(array('[[em]]', '[[/em]]'), array('', ''), (string) $sxe->description->$name); + { + $val = array(); + foreach($sxe->description->$name as $value) + { + $val[] = str_replace(array('[[em]]', '[[/em]]'), array('', ''), (string) $value); + } + $val = implode(' '.$field['separator'].' ', $val); + } else - $ret[] = $field; + { + $val = $field['value']; + } + + $ret[] = $val; } return $ret; diff --git a/lib/classes/searchEngine/adapter/sphinx/engine.class.php b/lib/classes/searchEngine/adapter/sphinx/engine.class.php index 29b2c72346..0967d8e8d2 100644 --- a/lib/classes/searchEngine/adapter/sphinx/engine.class.php +++ b/lib/classes/searchEngine/adapter/sphinx/engine.class.php @@ -752,8 +752,15 @@ class searchEngine_adapter_sphinx_engine extends searchEngine_adapter_abstract i 'before_match' => "", 'after_match' => "" ); + + $fields_to_send = array(); + + foreach($fields as $k=>$f) + { + $fields_to_send[$k] = $f['value']; + } - return $this->sphinx->BuildExcerpts($fields, $index, $query, $opts); + return $this->sphinx->BuildExcerpts($fields_to_send, $index, $query, $opts); } } diff --git a/lib/classes/setup.class.php b/lib/classes/setup.class.php index 2ff85bfdcc..f906ed0f67 100644 --- a/lib/classes/setup.class.php +++ b/lib/classes/setup.class.php @@ -436,7 +436,7 @@ class setup $message = 'Directory MUST be writable'; break; case 'version': - $result = version_compare($value, '1.17.0.2', '>='); + $result = version_compare($value, '1.18.0.3', '>='); if ($result) $message = sprintf ('Phrasea version %s is ok', $value); else diff --git a/lib/classes/supertwig.class.php b/lib/classes/supertwig.class.php index 42098a0c75..3f127dacfd 100644 --- a/lib/classes/supertwig.class.php +++ b/lib/classes/supertwig.class.php @@ -100,11 +100,10 @@ class supertwig $options = array_merge($default_options, $options); $extensions = array_merge($default_extensions, $extensions); - $this->init_twig(); - try { $this->set_options($options); + $this->init_twig(); $this->set_extensions($extensions); $this->addFilter(array('round' => 'round')); } diff --git a/lib/classes/task/Scheduler.class.php b/lib/classes/task/Scheduler.class.php index 782879a89b..0698886af4 100644 --- a/lib/classes/task/Scheduler.class.php +++ b/lib/classes/task/Scheduler.class.php @@ -108,11 +108,16 @@ class task_Scheduler foreach ($task_manager->get_tasks() as $task) { if (!$task->is_active()) + { continue; + } + $tid = $task->get_task_id(); if (!$task->is_running()) { + /* @var $task task_abstract */ + $task->reset_crash_counter(); $task->set_status(task_abstract::STATUS_TOSTART); } } diff --git a/lib/classes/task/appboxAbstract.class.php b/lib/classes/task/appboxAbstract.class.php index d33fc86554..80344bea4c 100644 --- a/lib/classes/task/appboxAbstract.class.php +++ b/lib/classes/task/appboxAbstract.class.php @@ -38,8 +38,9 @@ abstract class task_appboxAbstract extends task_abstract $this->log(("Warning : abox connection lost, restarting in 10 min.")); sleep(60 * 10); $this->running = false; + $this->return_value = self::RETURNSTATUS_TORESTART; - return(''); + return; } $this->set_last_exec_time(); @@ -85,7 +86,7 @@ abstract class task_appboxAbstract extends task_abstract $this->pause($duration); } - return($this->return_value); + return; } /** diff --git a/lib/classes/task/databoxAbstract.class.php b/lib/classes/task/databoxAbstract.class.php index f0559140d0..6049b7a48b 100644 --- a/lib/classes/task/databoxAbstract.class.php +++ b/lib/classes/task/databoxAbstract.class.php @@ -46,8 +46,9 @@ abstract class task_databoxAbstract extends task_abstract $this->log(("Warning : abox connection lost, restarting in 10 min.")); sleep(60 * 10); $this->running = false; + $this->return_value = self::RETURNSTATUS_TORESTART; - return(''); + return; } $this->set_last_exec_time(); @@ -104,7 +105,7 @@ abstract class task_databoxAbstract extends task_abstract $this->pause($duration); } - return($this->return_value); + return; } /** diff --git a/lib/classes/task/manager.class.php b/lib/classes/task/manager.class.php index 6c5c69ad37..51767999d7 100644 --- a/lib/classes/task/manager.class.php +++ b/lib/classes/task/manager.class.php @@ -112,5 +112,44 @@ class task_manager return $row; } + + public static function getAvailableTasks() + { + $registry = registry::get_instance(); + $taskdir = array( $registry->get('GV_RootPath') . "lib/classes/task/period/" + , $registry->get('GV_RootPath') . "config/classes/task/period/" + ); + $tasks = array(); + foreach($taskdir as $path) + { + if( ($hdir = @opendir($path)) ) + { + $tskin = array(); + $max = 9999; + while (($max-- > 0) && (($file = readdir($hdir)) !== false)) + { + if (!is_file($path . '/' . $file) || substr($file, 0, 1) == "." || substr($file, -10) != ".class.php") + continue; + + $classname = 'task_period_' . substr($file, 0, strlen($file) - 10); + + try + { + // $testclass = new $classname(null); + if ($classname::interfaceAvailable()) + { + $tasks[] = array("class" => $classname, "name" => $classname::getName(), "err" => null); + } + } + catch (Exception $e) + { + + } + } + closedir($hdir); + } + } + return $tasks; + } } diff --git a/lib/classes/task/period/archive.class.php b/lib/classes/task/period/archive.class.php index 6ac40734c7..4299bbebd1 100644 --- a/lib/classes/task/period/archive.class.php +++ b/lib/classes/task/period/archive.class.php @@ -1541,6 +1541,7 @@ class task_period_archive extends task_abstract $record->set_metadatas($meta['metadatas']); $record->set_binary_status(databox_status::operation_or($stat0, $stat1)); $record->rebuild_subdefs(); + $record->reindex(); $rid = $record->get_record_id(); $this->log(sprintf((' (recordId %s)'), $rid)); $this->archivedFiles++; @@ -1881,6 +1882,7 @@ class task_period_archive extends task_abstract $record->set_metadatas($meta['metadatas']); $record->set_binary_status(databox_status::operation_or(databox_status::operation_or($stat0, $stat1), databox_status::hex2bin($hexstat))); $record->rebuild_subdefs(); + $record->reindex(); $rid = $record->get_record_id(); if ($grp_rid !== NULL) diff --git a/lib/classes/task/period/emptyColl.class.php b/lib/classes/task/period/emptyColl.class.php index 4fc396231d..c31398f1ba 100644 --- a/lib/classes/task/period/emptyColl.class.php +++ b/lib/classes/task/period/emptyColl.class.php @@ -57,7 +57,7 @@ class task_period_emptyColl extends task_appboxAbstract $collection = collection::get_from_base_id($this->base_id); $this->total_records = $collection->get_record_amount(); $collection->empty_collection(200); - $this->records_done +=200; + $this->records_done += $this->total_records; $this->setProgress($this->records_done, $this->total_records); if ($this->total_records == 0) diff --git a/lib/classes/task/period/upgradetov32.class.php b/lib/classes/task/period/upgradetov32.class.php index f61cd25c65..7d365b2a74 100644 --- a/lib/classes/task/period/upgradetov32.class.php +++ b/lib/classes/task/period/upgradetov32.class.php @@ -67,8 +67,8 @@ class task_period_upgradetov32 extends task_abstract if (!$this->sbas_id) { printf("sbas_id '" . $this->sbas_id . "' invalide\n"); - - return 'stopped'; + $this->return_value = self::RETURNSTATUS_STOPPED; + return; } try @@ -78,6 +78,8 @@ class task_period_upgradetov32 extends task_abstract } catch (Exception $e) { + $this->return_value = self::RETURNSTATUS_STOPPED; + return; } @@ -94,6 +96,7 @@ class task_period_upgradetov32 extends task_abstract catch (Exception $e) { printf("Please verify all your databox meta fields before migrating, It seems somes are wrong\n"); + $this->return_value = self::RETURNSTATUS_STOPPED; return 'stopped'; } @@ -194,7 +197,7 @@ class task_period_upgradetov32 extends task_abstract $sql = 'select record_id, coll_id, xml, BIN(status) as status FROM record - WHERE record_id NOT IN (select distinct record_id from technical_datas) + WHERE migrated="0" AND record_id NOT IN (select distinct record_id from technical_datas) LIMIT 0, 500'; $stmt = $connbas->prepare($sql); @@ -238,7 +241,7 @@ class task_period_upgradetov32 extends task_abstract } catch (Exception $e) { - + } } @@ -280,9 +283,6 @@ class task_period_upgradetov32 extends task_abstract { $record = new record_adapter($this->sbas_id, $row['record_id']); - -// $sbas_id = $this->sbas_id; - $metas = $databox->get_meta_structure(); $metadatas = array(); @@ -367,12 +367,16 @@ class task_period_upgradetov32 extends task_abstract $memory = memory_get_usage() >> 20; if ($n_done >= 5000) - - return task_abstract::RETURNSTATUS_TORESTART; + { + $this->return_value = task_abstract::RETURNSTATUS_TORESTART; + return; + } if ($memory > 100) - - return task_abstract::RETURNSTATUS_TORESTART; - } + { + $this->return_value = task_abstract::RETURNSTATUS_TORESTART; + return; + } + } catch (Exception $e) { @@ -393,8 +397,6 @@ class task_period_upgradetov32 extends task_abstract $conn = connection::getPDOConnection(); - $ret = 'stopped'; - printf("taskid %s ending." . PHP_EOL, $this->get_task_id()); sleep(1); printf("good bye world I was task upgrade to version 3.2" . PHP_EOL); @@ -406,11 +408,12 @@ class task_period_upgradetov32 extends task_abstract $stmt->closeCursor(); $this->setProgress(0, 0); - $ret = 'todelete'; - + + $this->return_value = self::RETURNSTATUS_TODELETE; + flush(); - return $ret; + return; } } diff --git a/lib/conf.d/bases_structure.xml b/lib/conf.d/bases_structure.xml index 9d586b2134..56efc01fbc 100644 --- a/lib/conf.d/bases_structure.xml +++ b/lib/conf.d/bases_structure.xml @@ -1349,16 +1349,6 @@ - - bas_manage - int(1) unsigned - - - - - 0 - - bas_modify_struct int(1) unsigned @@ -5131,7 +5121,7 @@ type - enum('text','date','number') + enum('string','text','date','number') diff --git a/lib/unitTest/api/v1/aplicationTest.php b/lib/unitTest/api/v1/aplicationTest.php index e5864bdf71..4e0d0d8bdd 100644 --- a/lib/unitTest/api/v1/aplicationTest.php +++ b/lib/unitTest/api/v1/aplicationTest.php @@ -246,7 +246,7 @@ class API_V1_test_adapter extends PhraseanetWebTestCaseAbstract $this->assertTrue((strlen($metadatas->separator) > 0)); $this->assertTrue(is_string($metadatas->thesaurus_branch)); - $this->assertTrue(in_array($metadatas->type, array(databox_field::TYPE_DATE, databox_field::TYPE_NUMBER, databox_field::TYPE_TEXT))); + $this->assertTrue(in_array($metadatas->type, array(databox_field::TYPE_DATE,databox_field::TYPE_STRING, databox_field::TYPE_NUMBER, databox_field::TYPE_TEXT))); $this->assertTrue(is_bool($metadatas->indexable)); $this->assertTrue(is_bool($metadatas->multivalue)); $this->assertTrue(is_bool($metadatas->readonly)); diff --git a/lib/unitTest/api/v1/aplicationYamlTest.php b/lib/unitTest/api/v1/aplicationYamlTest.php index 31fd492ad8..8f18e626c4 100644 --- a/lib/unitTest/api/v1/aplicationYamlTest.php +++ b/lib/unitTest/api/v1/aplicationYamlTest.php @@ -254,7 +254,7 @@ class API_V1_test_adapterYaml extends PhraseanetWebTestCaseAbstract $this->assertTrue((strlen($metadatas["separator"]) > 0)); $this->assertTrue(is_string($metadatas["thesaurus_branch"])); - $this->assertTrue(in_array($metadatas["type"], array(databox_field::TYPE_DATE, databox_field::TYPE_NUMBER, databox_field::TYPE_TEXT))); + $this->assertTrue(in_array($metadatas["type"], array(databox_field::TYPE_DATE,databox_field::TYPE_STRING, databox_field::TYPE_NUMBER, databox_field::TYPE_TEXT))); $this->assertTrue(is_bool($metadatas["indexable"])); $this->assertTrue(is_bool($metadatas["multivalue"])); $this->assertTrue(is_bool($metadatas["readonly"])); diff --git a/lib/unitTest/userTest.php b/lib/unitTest/userTest.php new file mode 100644 index 0000000000..4bcc3d3912 --- /dev/null +++ b/lib/unitTest/userTest.php @@ -0,0 +1,59 @@ +assertFalse(User_Adapter::get_usr_id_from_email(null)); + try + { + $appbox = appbox::get_instance(); + + self::$user->set_email(null); + + $this->assertFalse(User_Adapter::get_usr_id_from_email(null)); + self::$user->set_email(''); + $this->assertFalse(User_Adapter::get_usr_id_from_email(null)); + self::$user->set_email('noone@example.com'); + $this->assertEquals(self::$user->get_id(), User_Adapter::get_usr_id_from_email('noone@example.com')); + } + catch(Exception $e) + { + $this->fail($e->getMessage()); + } + try + { + + self::$user->set_email('noonealt1@example.com'); + $this->fail('A user already got this address'); + } + catch(Exception $e) + { + + } + $this->assertFalse(User_Adapter::get_usr_id_from_email(null)); + } +} \ No newline at end of file diff --git a/lib/vendor/symfony b/lib/vendor/symfony index 6924e63587..4316595dbb 160000 --- a/lib/vendor/symfony +++ b/lib/vendor/symfony @@ -1 +1 @@ -Subproject commit 6924e63587466c865ca8dc746ff3fcf5cd1a1dcf +Subproject commit 4316595dbb7be9dcf2156d090d52f23f11b1ea90 diff --git a/lib/version.inc b/lib/version.inc index 9297194a5c..104f48509f 100644 --- a/lib/version.inc +++ b/lib/version.inc @@ -15,5 +15,5 @@ * @license http://opensource.org/licenses/gpl-3.0 GPLv3 * @link www.phraseanet.com */ -define('GV_version', '3.5.0.0RC1'); -define('GV_version_name', 'Archaeopteryx'); +define('GV_version', '3.5.5.0'); +define('GV_version_name', 'Baobab'); diff --git a/templates/web/admin/databox/doc_structure.twig b/templates/web/admin/databox/doc_structure.twig index 0487d8168f..f3fe059f73 100644 --- a/templates/web/admin/databox/doc_structure.twig +++ b/templates/web/admin/databox/doc_structure.twig @@ -227,55 +227,64 @@
-
-
- - - - - - - - - - - - - - - - - - - - + {% trans 'boutton::ajouter' %} + + + + +
- - {% trans 'Nom' %} - - {% trans 'Source' %}Source - - DCES - - {% trans 'Multivalue' %} - - {% trans 'Indexable' %} - - {% trans 'Lecture seule' %} - - {% trans 'Branche Thesaurus' %} - - {% trans 'Affiche dans report' %} - - Regdate - - Regname - - Regdesc - - {% trans 'Afficher en titre' %} -
+ + + + + + + + + + + + + + + + + + + + + {% for field in fields %} {% set disabled = '' %} {% if field.is_on_error() %} @@ -304,11 +313,26 @@ + + + diff --git a/templates/web/admin/editusers.twig b/templates/web/admin/editusers.twig index e165e40072..dd36b33274 100644 --- a/templates/web/admin/editusers.twig +++ b/templates/web/admin/editusers.twig @@ -15,7 +15,7 @@ {% set display = 'block' %} - {% if right[name] != users|length and name != 'access' and right['access'] != users|length %} + {% if right[name] != users|length and name != 'access' and right['access'] != users|length and type != 'sbas' %} {% set display = 'none' %} {% endif %} @@ -111,7 +111,7 @@
  • Droits
  • - {% if main_user is not empty %} + {% if main_user is not empty and main_user.is_template is empty %}
  • Fiche
  • @@ -142,7 +142,7 @@ @@ -402,7 +402,7 @@ - {% if main_user is not empty %} + {% if main_user is not empty and main_user.is_template is empty %}
    + + {% trans 'Nom' %} + + {% trans 'Source' %}Source + + DCES + + {% trans 'Multivalue' %} + + {% trans 'Indexable' %} + + {% trans 'Required' %} + + {% trans 'Lecture seule' %} + + {% trans 'Type' %} + + {% trans 'Separateur' %} + + {% trans 'Branche Thesaurus' %} + + {% trans 'Affiche dans report' %} + + Regdate + + Regname + + Regdesc + + {% trans 'Afficher en titre' %} +
    + + + + + + - +
    diff --git a/templates/web/admin/publications/list.html b/templates/web/admin/publications/list.html index 2666a37bcf..7cb557186a 100644 --- a/templates/web/admin/publications/list.html +++ b/templates/web/admin/publications/list.html @@ -48,7 +48,7 @@ - + @@ -72,7 +72,7 @@
    {% trans 'Titre' %} {% trans 'Date Creation' %} {% trans 'Restriction' %}{% trans 'Visible sur la homepage' %}{% trans 'Public' %}
    {% if feed.is_public() %} - + {% endif %} diff --git a/templates/web/admin/task.html b/templates/web/admin/task.html index eb35b69976..34ffc87d5d 100644 --- a/templates/web/admin/task.html +++ b/templates/web/admin/task.html @@ -1,440 +1,449 @@ - - - - - {{task.printInterfaceHEAD()}} - - + + + - - {{task.printInterfaceJS()}} - + + + {{task.printInterfaceJS()}} + - + - -
    -

    {{task.getName()}} id : {{task.get_task_id()}}

    - - - - - - -
    - {% trans 'admin::tasks: Nombre de crashes : ' %} {{task.get_crash_counter()}} - - - {% trans 'admin::tasks: reinitialiser el compteur de crashes' %} -
    -
    - -
    -
    -
    - {% if task.printInterfaceHTML %} -
    - {% trans 'boutton::vue graphique' %} -
    - {% endif %} -
    - {% trans 'boutton::vue xml' %} -
    -
    - {% if task.getGraphicForm %} -
    - {% if task.printInterfaceHTML %} - {{task.printInterfaceHTML()|raw}} - {% else %} -
    - {% endif %} -
    - - {% endif %} - -
    -
    - - - - - - + +
    +

    {{task.getName()}} id : {{task.get_task_id()}}

    + + + + + -
    - +
    + {% trans 'admin::tasks: Nombre de crashes : ' %} {{task.get_crash_counter()}} + + + {% trans 'admin::tasks: reinitialiser el compteur de crashes' %} +
    -
    +
    +
    +
    + {% if task.printInterfaceHTML %} +
    + {% trans 'boutton::vue graphique' %} +
    + {% endif %} +
    + {% trans 'boutton::vue xml' %} +
    +
    + {% if task.getGraphicForm %} +
    + {% if task.printInterfaceHTML %} + {{task.printInterfaceHTML()|raw}} + {% else %} +
    + {% endif %} +
    + + {% endif %} + +
    +
    + + + + + + +
    +
    + +
    -
    -
    -
    - - -
    -
    -
    -
    - - +
    +
    +
    + + +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/templates/web/admin/users.html b/templates/web/admin/users.html index e396f3c187..47c1ea5099 100644 --- a/templates/web/admin/users.html +++ b/templates/web/admin/users.html @@ -52,33 +52,91 @@

    +
    +

    + {% trans 'Apply a template' %} + + +

    +
    - - - - - - - - @@ -120,8 +178,8 @@ {{users.get_total}} resultats - {% set pages = users.get_total() / 20 %} - {% set modulo = users.get_total() % 20 %} + {% set pages = users.get_total() / parm['per_page'] %} + {% set modulo = users.get_total() % parm['per_page'] %} {% if modulo > 0 %}{% set pages = pages + 1 %}{% endif %} {{pages|floor}} pages @@ -188,6 +246,9 @@ el.addClass('selected'); } }); + $('#users_page_form select[name="per_page"]').bind('change', function(){ + $(this).closest('form').submit(); + }); }); diff --git a/templates/web/common/caption_templates/answer.html b/templates/web/common/caption_templates/answer.html index f1fb7e9bf2..3e219f8320 100644 --- a/templates/web/common/caption_templates/answer.html +++ b/templates/web/common/caption_templates/answer.html @@ -1,5 +1,5 @@ {% macro format_caption(record, highlight, searchEngine) %} {% for name, value in record.get_caption().get_highlight_fields(highlight, null, searchEngine) %} -
    {{name}} : {{value|raw}}
    +
    {{name}} : {{value.value|raw}}
    {% endfor %} {% endmacro %} \ No newline at end of file diff --git a/templates/web/common/caption_templates/basket_element.html b/templates/web/common/caption_templates/basket_element.html index 8e4e1afefb..1ed37f824d 100644 --- a/templates/web/common/caption_templates/basket_element.html +++ b/templates/web/common/caption_templates/basket_element.html @@ -1,5 +1,5 @@ {% macro format_caption(record) %} {% for name, value in record.get_caption().get_highlight_fields() %} -
    {{name}} : {{value|raw}}
    +
    {{name}} : {{value.value|raw}}
    {% endfor %} {% endmacro %} \ No newline at end of file diff --git a/templates/web/common/caption_templates/internal_publi.html b/templates/web/common/caption_templates/internal_publi.html index 8e4e1afefb..1ed37f824d 100644 --- a/templates/web/common/caption_templates/internal_publi.html +++ b/templates/web/common/caption_templates/internal_publi.html @@ -1,5 +1,5 @@ {% macro format_caption(record) %} {% for name, value in record.get_caption().get_highlight_fields() %} -
    {{name}} : {{value|raw}}
    +
    {{name}} : {{value.value|raw}}
    {% endfor %} {% endmacro %} \ No newline at end of file diff --git a/templates/web/common/caption_templates/lazaret.html b/templates/web/common/caption_templates/lazaret.html index 8e4e1afefb..1ed37f824d 100644 --- a/templates/web/common/caption_templates/lazaret.html +++ b/templates/web/common/caption_templates/lazaret.html @@ -1,5 +1,5 @@ {% macro format_caption(record) %} {% for name, value in record.get_caption().get_highlight_fields() %} -
    {{name}} : {{value|raw}}
    +
    {{name}} : {{value.value|raw}}
    {% endfor %} {% endmacro %} \ No newline at end of file diff --git a/templates/web/common/caption_templates/overview.html b/templates/web/common/caption_templates/overview.html index 04e2d1278b..55d1775e11 100644 --- a/templates/web/common/caption_templates/overview.html +++ b/templates/web/common/caption_templates/overview.html @@ -1,5 +1,5 @@ {% macro format_caption(record) %} {% for name, value in record.get_caption().get_highlight_fields() %} -
    {{name}} : {{value|raw}}
    +
    {{name}} : {{value.value|raw}}
    {% endfor %} {% endmacro %} \ No newline at end of file diff --git a/templates/web/common/caption_templates/preview.html b/templates/web/common/caption_templates/preview.html index f1fb7e9bf2..3e219f8320 100644 --- a/templates/web/common/caption_templates/preview.html +++ b/templates/web/common/caption_templates/preview.html @@ -1,5 +1,5 @@ {% macro format_caption(record, highlight, searchEngine) %} {% for name, value in record.get_caption().get_highlight_fields(highlight, null, searchEngine) %} -
    {{name}} : {{value|raw}}
    +
    {{name}} : {{value.value|raw}}
    {% endfor %} {% endmacro %} \ No newline at end of file diff --git a/templates/web/common/dialog_export.twig b/templates/web/common/dialog_export.twig index b18a55bab9..2990e8b452 100644 --- a/templates/web/common/dialog_export.twig +++ b/templates/web/common/dialog_export.twig @@ -376,7 +376,7 @@
    - {% for datas in download.ftp_datas %} + {% for datas in download.get_ftp_datas() %} {{ _self.print_ftp_form(datas) }} {% endfor %}
    diff --git a/templates/web/common/index.twig b/templates/web/common/index.twig index 5e3765f273..12b66755c3 100644 --- a/templates/web/common/index.twig +++ b/templates/web/common/index.twig @@ -14,7 +14,7 @@
    {% include 'common/menubar.twig' %}
    -
    +
    {% block content %}{% endblock %}
    diff --git a/templates/web/prod/actions/publish/publish.html b/templates/web/prod/actions/publish/publish.html index 623da38a2a..9b3c0847e4 100644 --- a/templates/web/prod/actions/publish/publish.html +++ b/templates/web/prod/actions/publish/publish.html @@ -55,6 +55,9 @@ {% if feed.is_publisher(user) %}
    {{ feed.get_title() }} + {% if feed.is_public() %} + + {% endif %}
    {% endif %} diff --git a/templates/web/prod/feeds/entry_macro.html b/templates/web/prod/feeds/entry_macro.html index 5d3d1fbf83..167a120188 100644 --- a/templates/web/prod/feeds/entry_macro.html +++ b/templates/web/prod/feeds/entry_macro.html @@ -15,7 +15,7 @@
    + {% trans 'admin::compte-utilisateur id utilisateur' %} + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + + + + {% trans 'admin::compte-utilisateur identifiant' %} + + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + + + + {% trans 'admin::compte-utilisateur nom/prenom' %} + + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + + + + {% trans 'admin::compte-utilisateur societe' %} + + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + + + + {% trans 'admin::compte-utilisateur email' %} + + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + + + + {% trans 'admin::compte-utilisateur pays' %} + + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + + + + {% trans 'admin::compte-utilisateur dernier modele applique' %} + + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + + + + {% trans 'admin::compte-utilisateur date de creation' %} + + + {{ parm.ord == 'asc' ? '▼' : '▲' }} + +
    - {% if entry.get_feed().is_owner(user) %} + {% if entry.get_feed().is_owner(user) or entry.is_publisher(user) %} @@ -55,8 +55,8 @@
    {% for item in entry.get_content() %} {% set record = item.get_record() %} - {% set prefix = 'PUBLI' %} - {{record_format.block(record, user, session, false, null, prefix, entry.get_id(), item.get_id())}} + {% set prefix = 'PUBLI_' ~ item.get_id() %} + {{record_format.block(record, user, session, false, null, prefix, entry.get_id())}} {% endfor %}
    diff --git a/templates/web/prod/index.html b/templates/web/prod/index.html index ec0653af24..d6c4d0d7d6 100644 --- a/templates/web/prod/index.html +++ b/templates/web/prod/index.html @@ -372,18 +372,31 @@
    {% if registry.get('GV_sphinx') %} {% trans 'Trier par ' %} - - - {% trans 'rechercher par stemme' %} + + + {% trans 'rechercher par stemme' %} {% else %} - + {% trans 'Trier par ' %} + + + {% endif %}
    @@ -392,7 +405,9 @@
    diff --git a/templates/web/prod/results/record.html b/templates/web/prod/results/record.html index 4ba407d89d..14ed145861 100644 --- a/templates/web/prod/results/record.html +++ b/templates/web/prod/results/record.html @@ -1,4 +1,4 @@ -{% macro block(record, user, session, highlight, searchEngine, prefix, entry_id, suffix)%} +{% macro block(record, user, session, highlight, searchEngine, prefix, entry_id)%} {% import 'common/thumbnail.html' as thumbnail %} {% import 'common/doctype_icons.html' as doctype_icons %} {% import 'common/drop_down_options.html' as drop_down %} @@ -6,7 +6,7 @@ {% set sbas_id = record.get_base_id|sbasFromBas %} {% if entry_id %}
    {% elseif record.is_grouping() %} diff --git a/tmp/.gitignore b/tmp/.gitignore new file mode 100644 index 0000000000..d6b7ef32c8 --- /dev/null +++ b/tmp/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/www/admin/databases.php b/www/admin/databases.php index 2b647675e2..689562885c 100644 --- a/www/admin/databases.php +++ b/www/admin/databases.php @@ -63,7 +63,6 @@ phrasea::headers(); $code = _('Propositions de modifications des tables') . '
    ' . $code . '
    '; - ?>
                 
    @@ -87,10 +86,11 @@ phrasea::headers();
           {
             if (!$parm['new_settings'] && $parm['new_dbname'] && $parm['new_data_template'])
             {
    -
               if (p4string::hasAccent($parm['new_dbname']))
    -            $error['new_dbname'] = 'No special chars in dbname';
    -
    +          {
    +            $error[] = _('Database name can not contains special characters');
    +          }
    +          
               if (count($error) === 0)
               {
                 try
    @@ -99,23 +99,34 @@ phrasea::headers();
                   $data_template = new system_file($registry->get('GV_RootPath') . 'lib/conf.d/data_templates/' . $parm['new_data_template'] . '.xml');
     
                   $connbas = new connection_pdo('databox_creation', $hostname, $port, $user, $password, $parm['new_dbname']);
    -              $base = databox::create($appbox, $connbas, $data_template, $registry);
    -              $base->registerAdmin($user_obj);
    -              $createBase = $sbas_id = $base->get_sbas_id();
    +
    +              try
    +              {
    +                $base = databox::create($appbox, $connbas, $data_template, $registry);
    +                $base->registerAdmin($user_obj);
    +                $createBase = $sbas_id = $base->get_sbas_id();
    +              }
    +              catch (Exception $e)
    +              {
    +                $error[] = $e->getMessage();
    +              }
                 }
                 catch (Exception $e)
                 {
    -              $errors = $e->getMessage();
    +              $error[] = _('Database does not exists or can not be accessed');
                 }
               }
             }
    -        elseif ($parm['new_settings'] && $parm['new_hostname'] && $parm['new_port'] && $parm['new_user'] && $parm['new_password']
    +        elseif ($parm['new_settings'] && $parm['new_hostname'] && $parm['new_port'] 
    +                && $parm['new_user'] && $parm['new_password']
                     && $parm['new_dbname'] && $parm['new_data_template'])
             {
     
               if (p4string::hasAccent($parm['new_dbname']))
    -            $error['new_dbname'] = 'No special chars in dbname';
    -
    +          {
    +            $error[] = _('Database name can not contains special characters');
    +          }
    +          
               if (count($error) === 0)
               {
     
    @@ -129,7 +140,7 @@ phrasea::headers();
                 }
                 catch (Exception $e)
                 {
    -              $errors = $e->getMessage();
    +              $error[] = $e->getMessage();
                 }
               }
             }
    @@ -140,7 +151,7 @@ phrasea::headers();
             {
     
               if (p4string::hasAccent($parm['new_dbname']))
    -            $error['new_dbname'] = 'No special chars in dbname';
    +            $error[] = _('Database name can not contains special characters');
     
               if (count($error) === 0)
               {
    @@ -156,7 +167,7 @@ phrasea::headers();
                 catch (Exception $e)
                 {
                   $appbox->get_connection()->rollBack();
    -              $errors = $e->getMessage();
    +              $error[] = $e->getMessage();
                 }
               }
             }
    @@ -165,7 +176,7 @@ phrasea::headers();
             {
     
               if (p4string::hasAccent($parm['new_dbname']))
    -            $error['new_dbname'] = 'No special chars in dbname';
    +            $error[] = 'No special chars in dbname';
     
               if (count($error) === 0)
               {
    @@ -174,13 +185,12 @@ phrasea::headers();
                   $appbox->get_connection()->beginTransaction();
                   $base = databox::mount($appbox, $parm['new_hostname'], $parm['new_port'], $parm['new_user'], $parm['new_password'], $parm['new_dbname'], $registry);
                   $base->registerAdmin($user_obj);
    -//              $createBase = $sbas_id = $base->get_sbas_id();
                   $appbox->get_connection()->commit();
                 }
                 catch (Exception $e)
                 {
                   $appbox->get_connection()->rollBack();
    -              $errors = $e->getMessage();
    +              $error[] = $e->getMessage() . '@' . $e->getFile() . $e->getLine();
                 }
               }
             }
    @@ -216,7 +226,7 @@ phrasea::headers();
           }
           catch (Exception $e)
           {
    -
    +        
           }
         }
         ?>
    @@ -227,7 +237,7 @@ if ($createBase || $mountBase)
       $user = User_Adapter::getInstance($session->get_usr_id(), $appbox);
       $user->ACL()->delete_data_from_cache();
       ?>
    -          parent.reloadTree('bases:bases');
    +      parent.reloadTree('bases:bases');
       
     
         
    +    
    +    
    +      
         

    Bases actuelles :

      @@ -306,20 +325,20 @@ if ($createBase || $mountBase)
    - +
    @@ -358,20 +377,20 @@ if ($createBase || $mountBase)
    - +
    diff --git a/www/admin/description.php b/www/admin/description.php index 111ec47503..b70f803d02 100644 --- a/www/admin/description.php +++ b/www/admin/description.php @@ -21,7 +21,7 @@ $session = $appbox->get_session(); $request = http_request::getInstance(); $parm = $request->get_parms("srt", "ord", "act", "p0", // base_id - "str" // si act=CHGSTRUCTURE, structure en xml + "str" // si act=CHGSTRUCTURE, structure en xml ); @@ -61,7 +61,18 @@ if (!empty($_POST)) try { $local_parms = $httpRequest->get_parms( - 'name_' . $id, 'thumbtitle_' . $id, 'src_' . $id, 'multi_' . $id, 'indexable_' . $id, 'readonly_' . $id, 'tbranch_' . $id, 'report_' . $id, 'dces_' . $id + 'name_' . $id + , 'thumbtitle_' . $id + , 'src_' . $id + , 'multi_' . $id + , 'indexable_' . $id + , 'readonly_' . $id + , 'required_' . $id + , 'separator_' . $id + , 'type_' . $id + , 'tbranch_' . $id + , 'report_' . $id + , 'dces_' . $id ); $field = databox_field::get_instance($databox, $id); @@ -70,7 +81,10 @@ if (!empty($_POST)) $field->set_source($local_parms['src_' . $id]); $field->set_multi($local_parms['multi_' . $id]); $field->set_indexable($local_parms['indexable_' . $id]); + $field->set_required($local_parms['required_' . $id]); + $field->set_separator($local_parms['separator_' . $id]); $field->set_readonly($local_parms['readonly_' . $id]); + $field->set_type($local_parms['type_' . $id]); $field->set_tbranch($local_parms['tbranch_' . $id]); $field->set_report($local_parms['report_' . $id]); @@ -107,7 +121,7 @@ if (!empty($_POST)) $parms = $httpRequest->get_parms('newfield'); - if($parms['newfield']) + if ($parms['newfield']) { databox_field::create($databox, $parms['newfield']); } @@ -124,7 +138,7 @@ if (!empty($_POST)) } catch (Exception $e) { - + } } } diff --git a/www/admin/task2.php b/www/admin/task2.php index 1772aac2f1..2ea0358ada 100644 --- a/www/admin/task2.php +++ b/www/admin/task2.php @@ -76,4 +76,10 @@ function stripdoublequotes($value) } $twig = new supertwig(); $twig->addFilter(array('stripdoublequotes'=>'stripdoublequotes')); + +if(!$task->getGraphicForm()) +{ + $parm['view'] = 'XML'; +} + $twig->display('admin/task.html', array('task'=>$task, 'view'=>$parm['view'])); diff --git a/www/admin/taskmanager.php b/www/admin/taskmanager.php index 2c59dc3b62..072d56e1f5 100644 --- a/www/admin/taskmanager.php +++ b/www/admin/taskmanager.php @@ -33,35 +33,6 @@ $registry = $appbox->get_registry(); $task_manager = new task_manager($appbox); -$tasks = array(); -$path = $registry->get('GV_RootPath') . "lib/classes/task/period/"; -if ($hdir = opendir($path)) -{ - $tskin = array(); - $max = 9999; - while (($max-- > 0) && (($file = readdir($hdir)) !== false)) - { - if (!is_file($path . '/' . $file) || substr($file, 0, 1) == "." || substr($file, -10) != ".class.php") - continue; - - $classname = 'task_period_' . substr($file, 0, strlen($file) - 10); - - try - { -// $testclass = new $classname(null); - if ($classname::interfaceAvailable()) - { - $tasks[] = array("class" => $classname, "name" => $classname::getName(), "err" => null); - } - } - catch (Exception $e) - { - - } - } - closedir($hdir); -} - ?> @@ -346,6 +317,7 @@ if ($hdir = opendir($path)) var menuNewTask = [ get('GV_maintenance')
    ' . _('login::captcha: recopier les mots ci dessous') . ' : -
    ' . recaptcha_get_html(GV_captcha_public_key) . '
    '; +
    ' . recaptcha_get_html($registry->get('GV_captcha_public_key')) . '
    '; } $public_feeds = Feed_Collection::load_public_feeds($appbox); diff --git a/www/skins/admin/admincolor.css b/www/skins/admin/admincolor.css index f45e65ee20..4733139710 100644 --- a/www/skins/admin/admincolor.css +++ b/www/skins/admin/admincolor.css @@ -48,6 +48,7 @@ FFFA00 9E9C3C 777400 FFFC65 FFFEB5 #left{ background-color:#fffbcd; + overflow:auto; } #FNDR{ overflow:auto; @@ -141,4 +142,20 @@ table.admintable tbody .dropdown{ .users_col.options{ cursor:pointer; color:#AFAFAF; +} +#users th.sortable span{ + margin:0 5px; +} +#users th.sortable{ + cursor:pointer; +} +#users th.sortable.hover, +#users th.sortable.sorted{ + background-color:#F0AD30; +} +#users th.sortable span.ord_notifier{ + display:none; +} +#users th.sortable.sorted span.ord_notifier{ + display:inline; } \ No newline at end of file diff --git a/www/skins/admin/flèche verte.png b/www/skins/admin/fleche_verte.png similarity index 100% rename from www/skins/admin/flèche verte.png rename to www/skins/admin/fleche_verte.png diff --git a/www/skins/icons/substitution/image_jpeg.png b/www/skins/icons/substitution/image_jpeg.png index 7573f145ff..ade94258ad 100644 Binary files a/www/skins/icons/substitution/image_jpeg.png and b/www/skins/icons/substitution/image_jpeg.png differ diff --git a/www/skins/lng/inclin-ar.gif b/www/skins/lng/inclin-ar.gif deleted file mode 100644 index 8ad6e70d9a..0000000000 Binary files a/www/skins/lng/inclin-ar.gif and /dev/null differ diff --git a/www/skins/lng/inclin-ar.png b/www/skins/lng/inclin-ar.png new file mode 100644 index 0000000000..3a95504d21 Binary files /dev/null and b/www/skins/lng/inclin-ar.png differ diff --git a/www/skins/lng/inclin-de.gif b/www/skins/lng/inclin-de.gif deleted file mode 100644 index 8ad6e70d9a..0000000000 Binary files a/www/skins/lng/inclin-de.gif and /dev/null differ diff --git a/www/skins/lng/inclin-de.png b/www/skins/lng/inclin-de.png new file mode 100644 index 0000000000..cb0a8c17f8 Binary files /dev/null and b/www/skins/lng/inclin-de.png differ diff --git a/www/skins/lng/inclin-en.gif b/www/skins/lng/inclin-en.gif deleted file mode 100644 index 8ad6e70d9a..0000000000 Binary files a/www/skins/lng/inclin-en.gif and /dev/null differ diff --git a/www/skins/lng/inclin-en.png b/www/skins/lng/inclin-en.png new file mode 100644 index 0000000000..3a95504d21 Binary files /dev/null and b/www/skins/lng/inclin-en.png differ diff --git a/www/skins/lng/inclin-fr.gif b/www/skins/lng/inclin-fr.gif deleted file mode 100644 index 6a661a05ea..0000000000 Binary files a/www/skins/lng/inclin-fr.gif and /dev/null differ diff --git a/www/skins/lng/inclin-fr.png b/www/skins/lng/inclin-fr.png new file mode 100644 index 0000000000..499c680c0a Binary files /dev/null and b/www/skins/lng/inclin-fr.png differ