core/modules/_core/template/crud/field/multiple.phtml

Summary

Maintainability
Test Coverage
<?php
/* @var $this Ajde_Template_Parser_Phtml_Helper */
$this->requireJsPublic('core/fancybox/jquery.fancybox.pack.js');
$this->requireCssPublic('core/fancybox/jquery.fancybox.css');
/* @var $field Ajde_Crud_Field_Multiple */
$field = $this->field;
?>

<input
    <?php echo $field->getHtmlAttributes(); ?>
/>

<div
    class='multiple <?php if ($field->hasHideInIframe()) { echo 'hideInIframe'; } ?>'
    data-edit-route='<?php echo $field->has('editRouteFunction') ? $field->getCrud()->getModel()->{$field->get('editRouteFunction')}() : $field->getEditRoute(); ?>'
    data-field='<?php echo $field->getName(); ?>'
    data-parent='<?php echo $field->has('parent') ? $field->get('parent') : (string) $field->getCrud()->getModel()->getTable(); ?>'
<?php //    data-parent-id='<? php echo $field->getCrud()->getModel()->getPK(); ? >' ?>
    data-dynamic='<?php echo ($field->hasTableFields() ? '1' : '0'); ?>'
    data-simple='<?php echo ($field->hasSimpleSelector() && $field->getSimpleSelector() ? '1' : '0'); ?>'
    <?php
    if ($field->hasPrefillField()) { ?>
    data-prefill='<?php echo implode(',', array_keys($field->getPrefillField())); ?>'
        <?php foreach ($field->getPrefillField() as $fieldName => $value) { ?>
            data-prefill-<?php echo $fieldName; ?>='<?php echo esc($value); ?>'
        <?php }
    } ?>
>

    <?php if ($field->hasSimpleSelector() && $field->getSimpleSelector()) { // simple ?>

        <div class="controls-row simple-selector">
            <a href='javascript:void(null);' class='span2 btn btn-success new newMultiple' data-select='<?php echo $field->getName(); ?>'><i class='icon-plus icon-white'></i></a>
            <div class='input'>
                <?php $children = $field->getChildren();
                $ids = array();
                foreach($children as $child) {
                    $ids[] = $child->getPK();
                }

                // Prepend ids to values
                $values = [];
                $remaining = $field->getValues()->load();
                foreach($ids as $id) {
                    $currentIteration = [];
                    foreach($remaining as $model) {
                        if ($id == $model->getPK()) {
                            $values[] = $model;
                        } else {
                            $currentIteration[] = $model;
                        }
                    }
                    $remaining = $currentIteration;
                }
                $values = array_merge($values, $remaining);
                ?>
                <select class='selectize' name='<?php echo $field->getName(); ?>[]' multiple='multiple' data-placeholder="<?php echo trans('Choose some options'); ?>">
                    <?php foreach($values as $model) {
                        /* @var $model Ajde_Model */ ?>
                        <option value='<?php echo $model->getPK(); ?>' <?php if (in_array($model->getPK(), $ids)) { echo 'selected="selected"'; } ?> >
                            <?php echo $model->get($model->getDisplayField()); ?>
                        </option>
                    <?php } ?>
                </select>
            </div>
        </div>


    <?php } else { // advanced ?>

        <div class='multipleToolbar'>
            <a href='javascript:void(null);' class='btn btn-success new newMultiple' data-select='<?php echo $field->getName(); ?>'><i class='icon-plus icon-white'></i></a>
            <?php if ($field->hasCrossReferenceTable()) { ?>
                <span class="or">or</span>

                <?php if ($field->has('usePopupSelector') && $field->get('usePopupSelector')) {

                    $this->requireJs('crud/field/picker');
                    $this->requireCss('crud/field/picker');

                    $pickerMultiple = 1;
                    $pickerType = 'multiple';
                    include 'picker.phtml';

                    ?>

                <?php } else { ?>

                    <div class='btn-group'>
                        <select class='selectize' name='<?php echo $field->getName(); ?>' data-placeholder="<?php echo trans('Choose existing'); ?>">
                            <option value='' class='choose'></option>
                            <?php foreach($field->getValues() as $model) {
                                /* @var $model Ajde_Model */ ?>
                                <option value='<?php echo $model->getPK(); ?>'>
                                    <?php echo $model->get($model->getDisplayField()); ?>
                                </option>
                            <?php } ?>
                        </select>
                        <a href='javascript:void(null);' class='btn add addMultiple'><i class='icon-ok icon-white'></i></a>
                    </div>

                <?php } ?>

            <?php } ?>
        </div>

        <?php $this->requireCss('crud/list'); ?>

        <table class='table table-striped table-hover crud multipleList <?php if ($field->hasHideMainColumn() && $field->getHideMainColumn()) { echo 'hideMainColumn'; }?>'>
            <thead>
                <tr>
                    <th class='main'><?php echo $field->getModel()->getTable()->getFieldProperties($field->getModel()->getDisplayField(), 'label'); ?></th>
                    <?php if ($field->hasTableFields()) {
                        foreach ($field->getTableFields() as $extraField) {
                            if ($extraField['type'] == 'meta') {
                                $meta = new MetaModel();
                                $meta->loadByPK($extraField['name']); ?>
                                <th><?php echo $meta->getName(); ?></th>
                            <?php } else { ?>
                                <th><?php echo $field->getModel()->getTable()->getFieldProperties($extraField['name'], 'label'); ?></th>
                            <?php }
                        }
                    } ?>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                <tr class='template'>
                    <td></td>
                    <td class='main'></td>
                    <?php if ($field->hasTableFields()) {
                        foreach ($field->getTableFields() as $extraField) {
                            if ($extraField['type'] == 'sort') {
                                $sortTable = $field->getCrud()->getModel()->getTable();
                                $pk = $sortTable->getPK();
                                if ($field->hasCrossReferenceTable()) {
                                    $sortTable = $field->getCrossReferenceTable();
                                    $pk = $field->getCrossReferenceTable() . '.id';
                                }
                                $this->requireJsPublic('core/jquery.tablednd.js', Ajde_Document_Format_Html::RESOURCE_POSITION_FIRST); ?>
                                <td class='sort'
                                    data-table='<?php echo $sortTable; ?>'
                                    data-field='<?php echo $extraField['name']; ?>'
                                    data-pk='<?php echo $pk; ?>'
                                >
                                    <span class="icon-move"></span>
                                </td>
                            <?php } else { ?>
                                <td></td>
                            <?php } ?>
                        <?php }
                    } ?>
                    <td class='buttons'>
                        <div class='btn-group'>
                            <a href='javascript:void(null);' class='btn editMultiple' data-id=''><i class='icon-pencil icon-white'></i></a>
                            <a href='javascript:void(null);' class='btn btn-<?php echo ($field->hasCrossReferenceTable()) ? 'warning' : 'danger'; ?> deleteMultiple' data-id=''>
                                <i class='icon-<?php echo ($field->hasCrossReferenceTable()) ? 'minus' : 'trash'; ?> icon-white'></i>
                            </a>
                        </div>
                    </td>
                </tr>
                <?php foreach($field->getChildren() as $child) {
                    /* @var $child Ajde_Model */ ?>
                    <?php

                    // TODO: side effects?
//                    $child->loadParents();

                    $pk = $child->getPK();
                    if ($field->hasCrossReferenceTable()) {
                        $pk = $child->get('crossId');
                    } ?>
                    <tr id="row-<?php echo $pk; ?>" data-id='<?php echo $child->getPK(); ?>'>
                        <td><?php echo $child->getPK(); ?></td>
                        <td class='main'>
                            <?php
                            $value = $child->get($child->getDisplayField());
                            if ($value instanceof Ajde_Model && $value->hasLoaded()) {
                                echo $value->get($value->getDisplayField());
                            } else {
                                echo $value;
                           } ?>
                        </td>
                        <?php if ($field->hasTableFields()) {
                            foreach ($field->getTableFields() as $extraField) {
                                $value    = $child->has($extraField['name']) ? $child->get($extraField['name']) : false;
                                $type    = $extraField['type'];
                                if ($type == 'file' && $value) { ?>
                                    <td>
                                        <?php
                                        $extension = pathinfo($value, PATHINFO_EXTENSION);
                                        if ($isImage = in_array(strtolower($extension), array('jpg', 'jpeg', 'png', 'gif'))) {
                                            $thumbDim = $field->hasThumbDim() ? $field->getThumbDim() : array('width' => 75, 'height' => 75); ?>
                                            <a class='imagePreview img' title='<?php echo esc($value); ?>' href='<?php echo $extraField['saveDir'] . $value; ?>' target='_blank'>
                                                <?php echo $this->ACImage(array(
                                                        'filename' => $extraField['saveDir'] . $value,
                                                        'width' => $thumbDim['width'],
                                                        'height' => $thumbDim['height'],
                                                        'crop' => true
                                                    )); ?>
                                            </a>
                                        <?php } else { ?>
                                            <img class='icon' src='<?php echo Ajde_Resource_FileIcon::_($extension); ?> ' />
                                            <a class='filePreview preview' href='<?php echo $extraField['saveDir'] . $value; ?>' target='_blank'><?php echo $value; ?></a>
                                        <?php } ?>
                                    </td>
                                <?php } else if ($type == 'file') { ?>
                                    <td></td>
                                <?php } else if ($type == 'sort') {
                                    $sortTable = $field->getCrud()->getModel()->getTable();
                                    $pk = $sortTable->getPK();
                                    if ($field->hasCrossReferenceTable()) {
                                        $sortTable = $field->getCrossReferenceTable();
                                        $pk = $field->getCrossReferenceTable() . '.id';
                                    } ?>
                                    <td class='sort'
                                        data-table='<?php echo $sortTable; ?>'
                                        data-field='<?php echo $extraField['name']; ?>'
                                        data-pk='<?php echo $pk; ?>'
                                    >
                                        <span class='icon-move'></span>
                                    </td>
                                <?php } else if ($type == 'meta') {
                                    $value = $child->getMetaValue($extraField['name']);
                                    if ($extraField['function'] !== false) {
                                        $value = $child->{$extraField['function']}();
                                    } ?>
                                    <td><?php echo $value; ?></td>
                                <?php } else { ?>
                                    <td>
                                        <?php $value = $child->get($extraField['name']);
                                        if ($value instanceof Ajde_Model && $value->hasLoaded()) {
                                            echo $value->get($value->getDisplayField());
                                        } else {
                                            echo $value;
                                        } ?>
                                    </td>
                                <?php }
                            }
                        } ?>
                        <td class='buttons'>
                            <div class='btn-group'>
                                <a href='javascript:void(null);' class='btn btn-small editMultiple' data-id='<?php echo $child->getPK(); ?>'><i class='icon-pencil icon-white'></i></a>
                                <a href='javascript:void(null);' class='btn btn-small btn-<?php echo ($field->hasCrossReferenceTable()) ? 'warning' : 'danger'; ?> deleteMultiple' data-id='<?php echo $child->getPK(); ?>'>
                                    <i class='icon-<?php echo ($field->hasCrossReferenceTable()) ? 'minus' : 'trash'; ?> icon-white'></i>
                                </a>
                            </div>
                        </td>
                    </tr>
                <?php } ?>
            </tbody>
        </table>

    <?php } // simple or advanced ?>

</div>