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 @@
-
-