45 $xml =
"\n<TaxonomyMap>";
48 $xml .=
"</TaxonomyMap>";
53 function import($doc,
$tx)
73 $values = implode(
",", array_keys($set));
75 trace(
"## Generating taxonomy terms clause for $name using values ($values)", 3);
79 return "$pk IN (SELECT id FROM taxonomy_term_association WHERE class='{$this->cl}' AND term_id IN ($set))";
110 $tabs = array(
"Taxonomy Definition" =>
"/admin/taxonomy_form",
111 "Terms" =>
"/admin/taxonomy_terms");
113 $qs = ($key) ?
"taxonomy_id=$key" :
"";
114 return new TabBar(
"tabs",
$tabs,
$qs);
123 $registeredClasses = array();
127 return $registeredClasses;
164 "field_renderer" => $fieldRenderer,
"facet_filter" => $facetFilter);
188 if (!$bindingDetails)
190 trace(
"## $class is not registered as a binding target", 1);
194 $targets = Query::create(
$class, $bindingDetails[
"constraint"])->execute();
230 if (is_array($limitTo) && !array_search(
$taxonomy->identifier, $limitTo))
235 trace(
"Adding TaxonomyTermFieldRenderer for {$taxonomy->identifier}", 3);
239 $renderer->showSelectAll = $showSelectAll;
246 if (
$form instanceof SearchForm)
267 trace(
"### Found ".count(
$targets).
" binding targets", 3);
268 $renderers = array();
272 trace(
"## Checking {$target->target_class} - {$target->associated_classes}", 3);
277 trace(
"## Found a match", 3);
284 $renderer->showSelectAll = $showSelectAll;
311 if ($facet_filter_only and !
$taxonomy->enable_facet_filter)
continue;
313 $taxonomy_classes = explode(
",",
$taxonomy->associated_classes);
316 if (array_search(
$class, $taxonomy_classes) !== FALSE)
336 $bindingTargets = Query::create(
BindingTarget,
"")->execute();
340 if ($facet_filter_only and !
$bindingTarget->enable_facet_filter)
continue;
342 $assoc_classes = explode(
",",
$bindingTarget->associated_classes);
345 if (array_search(
$class, $assoc_classes) !== FALSE)
358 $indexedTerms = reindexList(
$taxonomy->Terms(),
"term");
360 $fp = fopen(
$file,
"r");
362 $fields = fgetcsv($fp);
366 foreach($fields as
$field)
382 while($values = fgetcsv($fp))
384 $term = $values[$fileIdx];
386 trace(
"Importing term", 3);
390 if (array_key_exists(
$term, $indexedTerms))
392 $import = $indexedTerms[
$term];
393 foreach($fields as
$field)
395 $import->set(
$field, $values[$i]);
404 foreach($fields as
$field)
406 $import->set(
$field, $values[$i]);
410 $import->taxonomy_id =
$taxonomy->taxonomy_id;
423 foreach($bindingTargets as
$target)
427 $facet = $manager->addFacet(
$target->target_class,
new $facetFilter(
$target));
428 $facet->dropdown = $dropdown;
429 $facet->dropdownMaxWidth = $max_width;
438 $facet->dropdown = $dropdown;
439 $facet->dropdownMaxWidth = $max_width;
454 if (isset($_REQUEST[
$taxonomy->identifier]))
456 $term_ids = explode(
",", $_REQUEST[
$taxonomy->identifier]);
457 checkNumeric($term_ids);
465 if (count(
$ids) == 0)
return array();
466 $idString = implode(
", ",
$ids);
468 return Query::create(
TaxonomyTerm,
"WHERE term_id IN ($idString)")->execute();
482 if (isset($_REQUEST[
$taxonomy->identifier]))
484 $term_ids = $_REQUEST[
$taxonomy->identifier];
486 if (!$term_ids)
continue;
487 if (!preg_match(
"/^[\\d,]+/", $term_ids))
492 $clauses[] =
"$pk IN (SELECT id FROM taxonomy_term_association WHERE class='$class' AND term_id IN ($term_ids))";
496 return implode(
" AND ", $clauses);
501 $tx =
new DataTransaction();
511 $ident =
$clone->identifier;
516 unset(
$clone->taxonomy_id);
518 $clone->identifier = $ident;
519 $clone->published =
false;
527 $cloneTerm->copy(
$term);
528 $cloneTerm->taxonomy_id =
$clone->taxonomy_id;
529 unset($cloneTerm->term_id);
530 $cloneTerm->joinTransaction(
$tx);
540 $form->msg = $e->getMessage();
558 $items = Query::create(
$class,
"WHERE $pk IN (SELECT target_id FROM binding WHERE id=:source_id and class=:source_class AND target_class=:target_class) $constraint")
561 ":source_class", get_class(
$source))
580 $items = Query::create(
$class,
"WHERE $pk IN (SELECT id FROM binding WHERE target_id=:target_id and class=:source_class AND target_class=:target_class) $constraint")
582 ":target_class", get_class(
$target),
603 $items = Query::create(
$class,
"WHERE $pk IN (SELECT target_id FROM binding WHERE id=:source_id and class=:source_class AND target_class=:target_class) $constraint")
606 ":source_class", get_class(
$source))
607 ->executeValue(
"COUNT(1)");
625 $items = Query::create(
$class,
"WHERE $pk IN (SELECT id FROM binding WHERE target_id=:target_id and class=:source_class AND target_class=:target_class) $constraint")
627 ":target_class", get_class(
$target),
629 ->executeValue(
"COUNT(1)");
649 return "$pk in (select id from taxonomy_term_association a, taxonomy_term t where t.term like {$text} and a.term_id=t.term_id and a.class='{$class}')";
655 $mgr->upgrade($version);
Field renderer for handling taxonomy term relationships.
static fireEvent($event, $parameter=null, $mustBeConsumed=false)
Fire an event to all subscribers as detailed in their manifests.
FakoliException is the base exception class for all Fakoli errors.
static usingFeature()
Uses the specified framework feature(s).
static serialize($class, $constraint="")
Serializes the specified DataItems to XML.
registerHandler($component, $title, $handler)
Registers a serialization handler for a component.
static unserialize($class, $doc, $tx, $save=true)
Instantiates DataItems from the supplied XML document and stores them in the database.
Provides a simple implementation of a SerializationHandler that can serialize a single DataItem class...
TaxonomyManager provides the internal API for working with taxonomies, facets and bindings.
static getBindableClassOptions()
static registerBindableClass($class, $format, $constraint="", $fieldRenderer=BindingTargetFieldRenderer, $facetFilter=BindingTargetFacetFilter)
__construct()
Create a new TaxonomyManager instance.
static getAssociatedTaxonomies($classes, $facet_filter_only=false)
static generateSearchConstraint($text, $class, $placeholder=false)
Generates a search constraint matching the supplied text against taxonomy terms that might be associa...
static getBindableClasses()
static upgradeComponent($version)
static getRegisteredClasses()
Retrieved the list of DataItem classes that have registered as supporting taxonomy term associations.
static getBoundItemsReverse($target, $class, $constraint="")
Same as TaxonomyManager::getBoundItems, but with the reverse relationship.
static getRequestFilterConstraint($class)
static addBindingFieldRenderers($form, $showSelectAll=true, $group=null)
static getBindingFacetFilterClass($bindingTarget)
static getBoundItems($source, $class, $constraint="")
Retrieve items of the specified class that are bound to the specified source object.
static getBindingOptionFormat($bindingTarget)
static addTaxonomyFieldRenderers($form, $showSelectAll=true, $group=null, $limitTo=null)
static getBindingFieldRendererClass($bindingTarget)
static getRegisteredClassOptions()
Retrieves the list of DataItem classes that have registered as supporting taxonomy term associations ...
static countBoundItems($target, $class, $constraint="")
Returns the number of items of the specified class that are bound to the specified source object.
static registerSerializationHandler()
static getBindingOptions($bindingTarget)
static cloneTaxonomy($form)
static getBindingTargets($classes, $facet_filter_only=false)
static getRequestTerms($classes)
static importTerms($taxonomy, $file)
static addFacets($manager, $classes, $dropdown=true, $max_width="200px", $width="200px", $height="120px")
static countBoundItemsReverse($target, $class, $constraint="")
Same as TaxonomyManager::countBoundItems, but with the reverse relationship.
Field renderer for handling taxonomy term relationships.