mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-23 09:53:15 +00:00
Merge branch 'master' into PHRAS-2739-incorporate-subdefwebhook
This commit is contained in:
@@ -73,7 +73,7 @@ class RedisCache extends CacheProvider implements Cache
|
||||
*/
|
||||
protected function doDelete($id)
|
||||
{
|
||||
return $this->_redis->delete($id);
|
||||
return $this->_redis->del($id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -316,6 +316,7 @@ class FieldsController extends Controller
|
||||
->set_tbranch($data['tbranch'])
|
||||
->set_generate_cterms($data['generate_cterms'])
|
||||
->set_gui_editable($data['gui_editable'])
|
||||
->set_gui_visible($data['gui_visible'])
|
||||
->set_report($data['report'])
|
||||
->setVocabularyControl(null)
|
||||
->setVocabularyRestricted(false);
|
||||
@@ -351,7 +352,7 @@ class FieldsController extends Controller
|
||||
{
|
||||
return [
|
||||
'name', 'multi', 'thumbtitle', 'tag', 'business', 'indexable', 'aggregable',
|
||||
'required', 'separator', 'readonly', 'gui_editable', 'type', 'tbranch', 'generate_cterms', 'report',
|
||||
'required', 'separator', 'readonly', 'gui_editable', 'gui_visible' , 'type', 'tbranch', 'generate_cterms', 'report',
|
||||
'vocabulary-type', 'vocabulary-restricted', 'dces-element', 'labels'
|
||||
];
|
||||
}
|
||||
|
@@ -596,6 +596,7 @@ class V1Controller extends Controller
|
||||
'thesaurus_branch' => $databox_field->get_tbranch(),
|
||||
'generate_cterms' => $databox_field->get_generate_cterms(),
|
||||
'gui_editable' => $databox_field->get_gui_editable(),
|
||||
'gui_visible' => $databox_field->get_gui_visible(),
|
||||
'type' => $databox_field->get_type(),
|
||||
'indexable' => $databox_field->is_indexable(),
|
||||
'multivalue' => $databox_field->is_multi(),
|
||||
|
@@ -77,6 +77,7 @@ class EditController extends Controller
|
||||
'tbranch' => $meta->get_tbranch(),
|
||||
'generate_cterms' => $meta->get_generate_cterms(),
|
||||
'gui_editable' => $meta->get_gui_editable(),
|
||||
'gui_visible' => $meta->get_gui_visible(),
|
||||
'maxLength' => $meta->get_tag()
|
||||
->getMaxLength(),
|
||||
'minLength' => $meta->get_tag()
|
||||
|
@@ -382,7 +382,6 @@ class QueryController extends Controller
|
||||
'labels' => $field->get_labels(),
|
||||
'type' => $field->get_type(),
|
||||
'field' => $field->get_name(),
|
||||
'query' => "field." . $field->get_name() . ":%s",
|
||||
'trans_label' => $field->get_label($this->app['locale']),
|
||||
];
|
||||
$field->get_label($this->app['locale']);
|
||||
|
@@ -16,7 +16,7 @@ class Version
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $number = '4.1.0-alpha.17a';
|
||||
private $number = '4.1.0-alpha.18a';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
|
@@ -38,6 +38,7 @@ final class DbalDataboxFieldRepository implements DataboxFieldRepository
|
||||
'label_nl',
|
||||
'generate_cterms',
|
||||
'gui_editable',
|
||||
'gui_visible',
|
||||
];
|
||||
|
||||
/** @var DataboxFieldFactory */
|
||||
|
@@ -45,6 +45,9 @@ class TextNode extends AbstractTermNode implements ContextAbleInterface
|
||||
foreach ($context->localizeField($field) as $f) {
|
||||
$index_fields[] = $f;
|
||||
}
|
||||
foreach ($context->truncationField($field) as $f) {
|
||||
$index_fields[] = $f;
|
||||
}
|
||||
}
|
||||
if (!$index_fields) {
|
||||
return null;
|
||||
|
@@ -323,7 +323,7 @@ class ElasticsearchOptions
|
||||
"aggregated (2 values: fired = 0 or 1)" => -1,
|
||||
],
|
||||
'output_formatter' => function($value) {
|
||||
static $map = ['0'=>"No flash", '1'=>"Flash"];
|
||||
static $map = ["false"=>"No flash", "true"=>"Flash", '0'=>"No flash", '1'=>"Flash"];
|
||||
return array_key_exists($value, $map) ? $map[$value] : $value;
|
||||
},
|
||||
],
|
||||
|
@@ -90,6 +90,16 @@ class Index
|
||||
// TODO Maybe replace nfkc_normalizer + asciifolding with icu_folding
|
||||
'filter' => ['nfkc_normalizer', 'asciifolding']
|
||||
],
|
||||
'truncation_analyzer' => [
|
||||
'type' => 'custom',
|
||||
'tokenizer' => 'truncation_tokenizer',
|
||||
'filter' => ['lowercase', 'stop', 'kstem']
|
||||
],
|
||||
'truncation_analyzer#search' => [
|
||||
'type' => 'custom',
|
||||
'tokenizer' => 'truncation_tokenizer',
|
||||
'filter' => ['lowercase', 'stop', 'kstem']
|
||||
],
|
||||
// Lang specific
|
||||
'fr_full' => [
|
||||
'type' => 'custom',
|
||||
@@ -145,6 +155,12 @@ class Index
|
||||
]
|
||||
],
|
||||
'tokenizer' => [
|
||||
'truncation_tokenizer' => [
|
||||
"type" => "edgeNGram",
|
||||
"min_gram" => "2",
|
||||
"max_gram" => "15",
|
||||
"token_chars" => [ "letter", "digit", "punctuation", "symbol" ]
|
||||
],
|
||||
'thesaurus_path' => [
|
||||
'type' => 'path_hierarchy'
|
||||
]
|
||||
|
@@ -13,6 +13,7 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator;
|
||||
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\Exception\Exception;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\RecordHelper;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\Structure\GlobalStructure;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\CandidateTerms;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\Thesaurus\Concept;
|
||||
@@ -27,7 +28,7 @@ class ThesaurusHydrator implements HydratorInterface
|
||||
private $thesaurus;
|
||||
private $candidate_terms;
|
||||
|
||||
public function __construct(Structure $structure, Thesaurus $thesaurus, CandidateTerms $candidate_terms)
|
||||
public function __construct(GlobalStructure $structure, Thesaurus $thesaurus, CandidateTerms $candidate_terms)
|
||||
{
|
||||
$this->structure = $structure;
|
||||
$this->thesaurus = $thesaurus;
|
||||
@@ -67,7 +68,13 @@ class ThesaurusHydrator implements HydratorInterface
|
||||
$terms = array();
|
||||
$filters = array();
|
||||
$field_names = array();
|
||||
/** @var Field[] $dbFields */
|
||||
$dbFields = $this->structure->getAllFieldsByDatabox($record['databox_id']);
|
||||
foreach ($fields as $name => $field) {
|
||||
if(!array_key_exists($name, $dbFields) || !$dbFields[$name]->get_generate_cterms()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$root_concepts = $field->getThesaurusRoots();
|
||||
// Loop through all values to prepare bulk query
|
||||
$field_values = \igorw\get_in($record, explode('.', $index_fields[$name]));
|
||||
@@ -98,10 +105,7 @@ class ThesaurusHydrator implements HydratorInterface
|
||||
}
|
||||
}
|
||||
else {
|
||||
$field = $fields[$name];
|
||||
if($field->get_generate_cterms()) {
|
||||
$this->candidate_terms->insert($field_names[$offset], $values[$offset]);
|
||||
}
|
||||
$this->candidate_terms->insert($field_names[$offset], $values[$offset]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -55,8 +55,13 @@ class StringFieldMapping extends ComplexFieldMapping
|
||||
{
|
||||
$child = new StringFieldMapping('light');
|
||||
$child->setAnalyzer('general_light');
|
||||
|
||||
$this->addChild($child);
|
||||
|
||||
$child = new StringFieldMapping('truncated');
|
||||
$child->setAnalyzer('truncation_analyzer', 'indexing');
|
||||
$child->setAnalyzer('truncation_analyzer#search', 'searching');
|
||||
$this->addChild($child);
|
||||
|
||||
$this->addLocalizedChildren($locales);
|
||||
|
||||
return $this;
|
||||
|
@@ -4,6 +4,11 @@ namespace Alchemy\Phrasea\SearchEngine\Elastic\Search;
|
||||
|
||||
class Escaper
|
||||
{
|
||||
public function quoteWord($value)
|
||||
{
|
||||
return '"' . $this->escapeRaw($value) . '"';
|
||||
}
|
||||
|
||||
public function escapeWord($value)
|
||||
{
|
||||
// Strip double quotes from values to prevent broken queries
|
||||
|
@@ -62,7 +62,7 @@ class FacetsResponse
|
||||
'value' => $key,
|
||||
'raw_value' => $key,
|
||||
'count' => $bucket['doc_count'],
|
||||
'query' => sprintf('field.%s:%s', $this->escaper->escapeWord($name), $this->escaper->escapeWord($key))
|
||||
'query' => sprintf('field.%s=%s', $this->escaper->escapeWord($name), $this->escaper->quoteWord($key))
|
||||
];
|
||||
}
|
||||
|
||||
|
@@ -9,6 +9,7 @@ use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Field;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\AST\Field as ASTField;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\AST\Flag;
|
||||
use Alchemy\Phrasea\SearchEngine\Elastic\Structure\Structure;
|
||||
use Alchemy\Phrasea\SearchEngine\SearchEngineOptions;
|
||||
|
||||
/**
|
||||
* @todo Check for private fields and only search on them if allowed
|
||||
@@ -23,13 +24,23 @@ class QueryContext
|
||||
private $queryLocale;
|
||||
/** @var array */
|
||||
private $fields;
|
||||
/** @var SearchEngineOptions */
|
||||
private $options;
|
||||
|
||||
public function __construct(Structure $structure, array $locales, $queryLocale, array $fields = null)
|
||||
/**
|
||||
* @param SearchEngineOptions|null $options
|
||||
* @param Structure $structure
|
||||
* @param array $locales
|
||||
* @param $queryLocale
|
||||
* @param array $fields
|
||||
*/
|
||||
public function __construct($options, Structure $structure, array $locales, $queryLocale, array $fields = null)
|
||||
{
|
||||
$this->structure = $structure;
|
||||
$this->locales = $locales;
|
||||
$this->queryLocale = $queryLocale;
|
||||
$this->fields = $fields;
|
||||
$this->options = $options;
|
||||
}
|
||||
|
||||
public function narrowToFields(array $fields)
|
||||
@@ -43,7 +54,7 @@ class QueryContext
|
||||
}
|
||||
}
|
||||
|
||||
return new static($this->structure, $this->locales, $this->queryLocale, $fields);
|
||||
return new static($this->options, $this->structure, $this->locales, $this->queryLocale, $fields);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -131,6 +142,16 @@ class QueryContext
|
||||
return $ret;
|
||||
}
|
||||
|
||||
public function truncationField(Field $field)
|
||||
{
|
||||
if($this->options && $this->options->useTruncation()) {
|
||||
return [sprintf('%s.truncated', $field->getIndexField())];
|
||||
}
|
||||
else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
private function localizeFieldName($field)
|
||||
{
|
||||
$fields = array();
|
||||
|
@@ -23,7 +23,7 @@ class QueryContextFactory
|
||||
? $this->getLimitedStructure($options)
|
||||
: $this->structure;
|
||||
|
||||
$context = new QueryContext($structure, $this->locales, $this->current_locale);
|
||||
$context = new QueryContext($options, $structure, $this->locales, $this->current_locale);
|
||||
|
||||
if ($options) {
|
||||
$fields = $this->getSearchedFields($options);
|
||||
|
@@ -24,6 +24,11 @@ class Field implements Typed
|
||||
*/
|
||||
private $name;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $databox_id;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
@@ -73,6 +78,7 @@ class Field implements Typed
|
||||
}
|
||||
|
||||
return new self($field->get_name(), $type, [
|
||||
'databox_id' => $databox->get_sbas_id(),
|
||||
'searchable' => $field->is_indexable(),
|
||||
'private' => $field->isBusiness(),
|
||||
'facet' => $facet,
|
||||
@@ -102,6 +108,7 @@ class Field implements Typed
|
||||
{
|
||||
$this->name = (string) $name;
|
||||
$this->type = $type;
|
||||
$this->databox_id = \igorw\get_in($options, ['databox_id'], 0);
|
||||
$this->is_searchable = \igorw\get_in($options, ['searchable'], true);
|
||||
$this->is_private = \igorw\get_in($options, ['private'], false);
|
||||
$this->facet = \igorw\get_in($options, ['facet']);
|
||||
@@ -126,6 +133,7 @@ class Field implements Typed
|
||||
public function withOptions(array $options)
|
||||
{
|
||||
return new self($this->name, $this->type, $options + [
|
||||
'databox_id' => $this->databox_id,
|
||||
'searchable' => $this->is_searchable,
|
||||
'private' => $this->is_private,
|
||||
'facet' => $this->facet,
|
||||
@@ -155,6 +163,11 @@ class Field implements Typed
|
||||
return sprintf('concept_path.%s', $this->name);
|
||||
}
|
||||
|
||||
public function get_databox_id()
|
||||
{
|
||||
return $this->databox_id;
|
||||
}
|
||||
|
||||
public function getType()
|
||||
{
|
||||
return $this->type;
|
||||
|
@@ -14,6 +14,12 @@ final class GlobalStructure implements Structure
|
||||
*/
|
||||
private $fields = array();
|
||||
|
||||
|
||||
/**
|
||||
* @var Field[][]
|
||||
*/
|
||||
private $fieldsByDatabox = [];
|
||||
|
||||
/**
|
||||
* @var Field[]
|
||||
* */
|
||||
@@ -119,6 +125,10 @@ final class GlobalStructure implements Structure
|
||||
|
||||
public function add(Field $field)
|
||||
{
|
||||
// store info for each field, not still merged by databox
|
||||
$this->fieldsByDatabox[$field->get_databox_id()][$field->getName()] = $field;
|
||||
|
||||
// store merged infos (same field name)
|
||||
$name = $field->getName();
|
||||
|
||||
if (isset($this->fields[$name])) {
|
||||
@@ -152,6 +162,11 @@ final class GlobalStructure implements Structure
|
||||
return $this->fields;
|
||||
}
|
||||
|
||||
public function getAllFieldsByDatabox($databox_id)
|
||||
{
|
||||
return $this->fieldsByDatabox[$databox_id];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Field[]
|
||||
*/
|
||||
|
@@ -71,6 +71,8 @@ class SearchEngineOptions
|
||||
protected $i18n;
|
||||
/** @var bool */
|
||||
protected $stemming = true;
|
||||
/** @var bool */
|
||||
protected $use_truncation = false;
|
||||
/** @var string */
|
||||
protected $sort_by;
|
||||
|
||||
@@ -105,7 +107,8 @@ class SearchEngineOptions
|
||||
'sort_ord',
|
||||
'business_fields',
|
||||
'max_results',
|
||||
'first_result'
|
||||
'first_result',
|
||||
'use_truncation',
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -217,6 +220,29 @@ class SearchEngineOptions
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Tells whether to use truncation or not
|
||||
*
|
||||
* @param boolean $boolean
|
||||
* @return $this
|
||||
*/
|
||||
public function setUseTruncation($boolean)
|
||||
{
|
||||
$this->use_truncation = !!$boolean;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return wheter the use of truncation is enabled or not
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function useTruncation()
|
||||
{
|
||||
return $this->use_truncation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return wheter the use of stemming is enabled or not
|
||||
*
|
||||
@@ -542,6 +568,8 @@ class SearchEngineOptions
|
||||
$options->setFields($databoxFields);
|
||||
$options->setDateFields($databoxDateFields);
|
||||
|
||||
$options->setUseTruncation((Boolean) $request->get('truncation'));
|
||||
|
||||
return $options;
|
||||
}
|
||||
|
||||
@@ -628,6 +656,7 @@ class SearchEngineOptions
|
||||
}
|
||||
},
|
||||
'stemming' => $optionSetter('setStemming'),
|
||||
'use_truncation' => $optionSetter('setUseTruncation'),
|
||||
'date_fields' => function ($value, SearchEngineOptions $options) use ($fieldNormalizer) {
|
||||
$options->setDateFields($fieldNormalizer($value));
|
||||
},
|
||||
|
@@ -48,6 +48,7 @@ class PhraseanetExtension extends \Twig_Extension
|
||||
new \Twig_SimpleFunction('border_checker_from_fqcn', array($this, 'getCheckerFromFQCN')),
|
||||
new \Twig_SimpleFunction('caption_field', array($this, 'getCaptionField')),
|
||||
new \Twig_SimpleFunction('caption_field_label', array($this, 'getCaptionFieldLabel')),
|
||||
new \Twig_SimpleFunction('caption_field_gui_visible', array($this, 'getCaptionFieldGuiVisible')),
|
||||
new \Twig_SimpleFunction('caption_field_order', array($this, 'getCaptionFieldOrder')),
|
||||
|
||||
new \Twig_SimpleFunction('flag_slugify', array(Flag::class, 'normalizeName')),
|
||||
@@ -77,6 +78,29 @@ class PhraseanetExtension extends \Twig_Extension
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* get localized field's gui_visible
|
||||
* @param RecordInterface $record
|
||||
* @param $fieldName
|
||||
* @return string - the name gui_visible
|
||||
*/
|
||||
public function getCaptionFieldGuiVisible(RecordInterface $record, $fieldName)
|
||||
{
|
||||
if ($record) {
|
||||
/** @var \appbox $appbox */
|
||||
$appbox = $this->app['phraseanet.appbox'];
|
||||
$databox = $appbox->get_databox($record->getDataboxId());
|
||||
foreach ($databox->get_meta_structure() as $meta) {
|
||||
/** @var \databox_field $meta */
|
||||
if ($meta->get_name() === $fieldName) {
|
||||
return $meta->get_gui_visible($this->app['locale']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
public function getCaptionField(RecordInterface $record, $field, $value)
|
||||
{
|
||||
if ($record instanceof ElasticsearchRecord) {
|
||||
|
@@ -80,7 +80,7 @@ class RedisSessionHandler implements \SessionHandlerInterface
|
||||
*/
|
||||
public function destroy($sessionId)
|
||||
{
|
||||
return 1 === $this->redis->delete($this->prefix.$sessionId);
|
||||
return 1 === $this->redis->del($this->prefix.$sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -464,6 +464,7 @@ class databox extends base implements ThumbnailedElement
|
||||
->set_tbranch(isset($field['tbranch']) ? (string) $field['tbranch'] : '')
|
||||
->set_generate_cterms((isset($field['generate_cterms']) && (string) $field['generate_cterms'] == 1))
|
||||
->set_gui_editable((isset($field['gui_editable']) && (string) $field['gui_editable'] == 1))
|
||||
->set_gui_visible((isset($field['gui_editable']) && (string) $field['gui_visible'] == 1))
|
||||
->set_thumbtitle(isset($field['thumbtitle']) ? (string) $field['thumbtitle'] : (isset($field['thumbTitle']) ? $field['thumbTitle'] : '0'))
|
||||
->set_report(isset($field['report']) ? (string) $field['report'] : '1')
|
||||
->save();
|
||||
|
@@ -45,6 +45,7 @@ class databox_field implements cache_cacheableInterface
|
||||
protected $tbranch;
|
||||
protected $generate_cterms;
|
||||
protected $gui_editable;
|
||||
protected $gui_visible;
|
||||
protected $separator;
|
||||
protected $thumbtitle;
|
||||
|
||||
@@ -170,6 +171,7 @@ class databox_field implements cache_cacheableInterface
|
||||
$this->tbranch = $row['tbranch'];
|
||||
$this->generate_cterms = (bool)$row['generate_cterms'];
|
||||
$this->gui_editable = (bool)$row['gui_editable'];
|
||||
$this->gui_visible = (bool)$row['gui_visible'];
|
||||
$this->VocabularyType = $row['VocabularyControlType'];
|
||||
$this->VocabularyRestriction = (bool)$row['RestrictToVocabularyControl'];
|
||||
|
||||
@@ -312,6 +314,7 @@ class databox_field implements cache_cacheableInterface
|
||||
`tbranch` = :tbranch,
|
||||
`generate_cterms` = :generate_cterms,
|
||||
`gui_editable` = :gui_editable,
|
||||
`gui_visible` = :gui_visible,
|
||||
`sorter` = :position,
|
||||
`thumbtitle` = :thumbtitle,
|
||||
`VocabularyControlType` = :VocabularyControlType,
|
||||
@@ -337,6 +340,7 @@ class databox_field implements cache_cacheableInterface
|
||||
':tbranch' => $this->tbranch,
|
||||
':generate_cterms' => $this->generate_cterms ? '1' : '0',
|
||||
':gui_editable' => $this->gui_editable ? '1' : '0',
|
||||
':gui_visible' => $this->gui_visible ? '1' : '0',
|
||||
':position' => $this->position,
|
||||
':thumbtitle' => $this->thumbtitle,
|
||||
':VocabularyControlType' => $this->getVocabularyControl() ? $this->getVocabularyControl()->getType() : null,
|
||||
@@ -390,6 +394,7 @@ class databox_field implements cache_cacheableInterface
|
||||
$meta->setAttribute('tbranch', $this->tbranch);
|
||||
$meta->setAttribute('generate_cterms', $this->generate_cterms ? '1' : '0');
|
||||
$meta->setAttribute('gui_editable', $this->gui_editable ? '1' : '0');
|
||||
$meta->setAttribute('gui_visible', $this->gui_visible ? '1' : '0');
|
||||
if ($this->multi) {
|
||||
$meta->setAttribute('separator', $this->separator);
|
||||
}
|
||||
@@ -743,6 +748,17 @@ class databox_field implements cache_cacheableInterface
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $gui_visible
|
||||
* @return databox_field
|
||||
*/
|
||||
public function set_gui_visible($gui_visible)
|
||||
{
|
||||
$this->gui_visible = $gui_visible;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param string $separator
|
||||
@@ -845,6 +861,15 @@ class databox_field implements cache_cacheableInterface
|
||||
return $this->gui_editable;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return boolean
|
||||
*/
|
||||
public function get_gui_visible()
|
||||
{
|
||||
return $this->gui_visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Boolean $all If set to false, returns a one-char separator to use for serialiation
|
||||
*
|
||||
@@ -957,6 +982,7 @@ class databox_field implements cache_cacheableInterface
|
||||
'tbranch' => $this->tbranch,
|
||||
'generate_cterms' => $this->generate_cterms,
|
||||
'gui_editable' => $this->gui_editable,
|
||||
'gui_visible' => $this->gui_visible,
|
||||
'separator' => $this->separator,
|
||||
'required' => $this->required,
|
||||
'report' => $this->report,
|
||||
@@ -995,10 +1021,10 @@ class databox_field implements cache_cacheableInterface
|
||||
}
|
||||
|
||||
$sql = "INSERT INTO metadatas_structure
|
||||
(`id`, `name`, `src`, `readonly`, `gui_editable`, `required`, `indexable`, `type`, `tbranch`, `generate_cterms`,
|
||||
(`id`, `name`, `src`, `readonly`, `gui_editable`,`gui_visible`, `required`, `indexable`, `type`, `tbranch`, `generate_cterms`,
|
||||
`thumbtitle`, `multi`, `business`, `aggregable`,
|
||||
`report`, `sorter`, `separator`)
|
||||
VALUES (null, :name, '', 0, 1, 0, 1, 'string', '', 1,
|
||||
VALUES (null, :name, '', 0, 1, 1, 0, 1, 'string', '', 1,
|
||||
null, 0, 0, 0,
|
||||
1, :sorter, '')";
|
||||
|
||||
|
@@ -2049,6 +2049,14 @@
|
||||
<default>1</default>
|
||||
<comment></comment>
|
||||
</field>
|
||||
<field>
|
||||
<name>gui_visible</name>
|
||||
<type>int(1) unsigned</type>
|
||||
<null></null>
|
||||
<extra></extra>
|
||||
<default>1</default>
|
||||
<comment></comment>
|
||||
</field>
|
||||
</fields>
|
||||
<indexes>
|
||||
<index>
|
||||
|
Reference in New Issue
Block a user