Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 6547 | Rev 7774 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

<?php

use LeadersLinked\Model\UserExperience;

$acl = $this->viewModel()
    ->getRoot()
    ->getVariable('acl');
$currentUserHelper = $this->currentUserHelper();
$currentUser = $currentUserHelper->getUser();
$currentCompany = $currentUserHelper->getCompany();
$companyId = $currentCompany->uuid;

$roleName = $currentUserHelper->getUserTypeId();

$routeWebsite = $this->url('profile/website', ['id' => $currentCompany->uuid]);
$routeCompanySize = $this->url('profile/company-size', ['id' => $currentCompany->uuid]);
$routeIndustry = $this->url('profile/industry', ['id' => $currentCompany->uuid]);
$routeExtended = $this->url('profile/extended', ['id' => $currentCompany->uuid]);
$routeSocialNetworks = $this->url('profile/social-network', ['id' => $currentCompany->uuid]);
$routeLocationAdd = $this->url('profile/location', ['id' => $currentCompany->uuid, 'operation' => 'add']);
$routeFoundationYear = $this->url('profile/foundation_year', ['id' => $currentCompany->uuid, 'operation' => 'add']);
$routeImageUpload = $this->url('profile/image', ['id' => $currentCompany->uuid, 'operation' => 'upload']);
$routeCoverUpload = $this->url('profile/cover', ['id' => $currentCompany->uuid, 'operation' => 'upload']);
$routeFooterUpload = $this->url('profile/footer', ['id' => $currentCompany->uuid, 'operation' => 'upload']);
$routeHeaderUpload = $this->url('profile/header', ['id' => $currentCompany->uuid, 'operation' => 'upload']);

$this->inlineScript()->appendFile('https://maps.googleapis.com/maps/api/js?key=' . $google_map_key . '&libraries=places');

$this->headLink()->appendStylesheet($this->basePath('plugins/nprogress/nprogress.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/nprogress/nprogress.js'));

$this->inlineScript()->appendFile($this->basePath('plugins/ckeditor/ckeditor.js'));

$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-fileinput/css/fileinput.min.css'));
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-fileinput/themes/explorer-fas/theme.css'));

$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/plugins/piexif.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/plugins/sortable.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/fileinput.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/js/locales/es.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/themes/fas/theme.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-fileinput/themes/explorer-fas/theme.js'));

$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/jquery.validate.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/additional-methods.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/jquery-validation/localization/messages_es.js'));

$this->headLink()->appendStylesheet($this->basePath('plugins/select2/css/select2.min.css'));
$this->headLink()->appendStylesheet($this->basePath('plugins/select2-bootstrap4-theme/select2-bootstrap4.min.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/select2/js/select2.min.js'));

$this->inlineScript()->appendFile($this->basePath('plugins/jquery-input-number/input-number-format.jquery.min.js'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-confirmation/dist/bootstrap-confirmation.js'));

$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap4-toggle/css/bootstrap4-toggle.min.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap4-toggle/js/bootstrap4-toggle.min.js'));

$this->inlineScript()->appendFile($this->basePath('plugins/moment/moment-with-locales.min.js'));
$this->headLink()->appendStylesheet($this->basePath('plugins/bootstrap-datetimepicker/css/bootstrap-datetimepicker.css'));
$this->inlineScript()->appendFile($this->basePath('plugins/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js'));

$this->inlineScript()->captureStart();
echo <<<JS
jQuery( document ).ready(function( $ ) {

    $.validator.addMethod('greaterThan', function (value, element, param) {
        var otherElement = $(param);
        return parseInt(value, 10) > parseInt(otherElement.val(), 10);
    }, 'ERROR_INVALID_MINIMUM');

    $.validator.addMethod('checkLocation', function (value, element, param) {
        var otherElement = $(param);
        return $.trim(otherElement.val()).length > 0;
    }, 'ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY');

    var autocompleteLocation = new google.maps.places.Autocomplete(
        (document.getElementById('location_search')),
        {types: ['(cities)']}
    );


    $.fn.fillInAddressLocation = function() {
        console.log('fillInAddressLocation');

        var place = autocompleteLocation.getPlace();
        if (!place.geometry) {
            $.fn.showError('ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY')
            return;
        } else {
        address1 = '';
        address2 = '';
        city1 = '';
        city2 = '';
        state = '';
        country = '';
        postal_code = '';

        formatted_address = place.formatted_address;
        latitude = place.geometry.location.lat();
        longitude = place.geometry.location.lng();
        var arrAddress = place.address_components;
            
        $.each(arrAddress, function(i, address_component) {
            if (address_component.types[0] == "route") {
                address1 = address_component.long_name;
            }
            if (address_component.types[0] == "sublocality") {
                address2 = address_component.long_name;
            }
            if (address_component.types[0] == "locality") {
                city1 = address_component.long_name;
            }
            if (address_component.types[0] == "administrative_area_level_2") {
                city2 = address_component.long_name;
            }
            if (address_component.types[0] == "administrative_area_level_1") {
                state = address_component.long_name;
            }
            if (address_component.types[0] == "country") {
                country = address_component.long_name;
            }
            if (address_component.types[0] == "postal_code") {
                postal_code = address_component.long_name;
            }
        });

        $('#form-location #formatted_address').val(formatted_address);
        $('#form-location #address1').val(address1);
        $('#form-location #address2').val(address2);
        $('#form-location #city1').val(city1);
        $('#form-location #city2').val(city2);
        $('#form-location #state').val(state);
        $('#form-location #country').val(country);
        $('#form-location #postal_code').val(postal_code);
        $('#form-location #latitude').val(latitude);
        $('#form-location #longitude').val(longitude);

        }
    }

    $.fn.renderLocation = function(data) {
        $('#locations-records').empty();
        if(Array.isArray(data)) {
            max = data.length;
            for(i = 0; i < max; i++)
            {
                var location = data[i];
                s = '<p>' + location['formatted_address']; 
                if(location['is_main'] == 'y') {
                    s = s + ' (LABEL_MAIN_LOCATION) '; 
                }
                s = s + ' <a href="#" title="" data-link="' + location['link_edit'] + '" class="btn-location-edit"><i class="fa fa-pencil"></i></a>&nbsp; ';
                s = s + ' <a href="#" title="" data-link="' + location['link_delete'] + '" class="btn-location-delete"><i class="fa fa-trash"></i></a>';
                s = s + ' </p>';

                if(i < (max - 1)) { 
                    s = s + '<hr/>'; 
                }
                $('#locations-records').append(s);
            }      
        }
    }

            $.validator.setDefaults({
            debug: true,
            highlight: function(element) {
                $(element).addClass('is-invalid');
            },
            unhighlight: function(element) {
                $(element).removeClass('is-invalid');
            },
            errorElement: 'span',
            errorClass: 'error invalid-feedback',
            errorPlacement: function(error, element) {
                if(element.parent('.form-group').length) {
                    error.insertAfter(element);
                } else if(element.parent('.toggle').length) {
                    error.insertAfter(element.parent().parent());
                } else {
                    error.insertAfter(element.parent());
                }
            }
        });
    
        $.fn.showFormErrorValidator = function(fieldname, errors) {
            var field = $(fieldname);
            if(field) {
                $(field).addClass('is-invalid');
    

                var error = $('<span id="' + fieldname +'-error" class="error invalid-feedback">' + errors + '</div>');
                if(field.parent('.form-group').length) {
                    error.insertAfter(field);
                } else  if(field.parent('.toggle').length) {
                    error.insertAfter(field.parent().parent());
                } else {
                    error.insertAfter(field.parent());
                }
            }
        };
   
    var validatorLocation = $('#form-location').validate({
        debug: true,
        onclick: false,
        onkeyup: false,
        onfocusout: false,
        ignore: [],
        rules: {
            'location_search': {
                required: true,
                checkLocation: '#form-location #latitude'
            }
        },
        submitHandler: function(form)
        {
            NProgress.start();
            $.ajax({
                'dataType'  : 'json',
                'accept'    : 'application/json',
                'method'    : 'post',
                'url'       :  $('#form-location').attr('action'),
                'data'      :  $('#form-location').serialize(),
            }).done(function(response) {
                if(response['success']) {
                    $.fn.renderLocation(response['data']);
                                                        
                    $("#location-box").modal('hide');
                } else {
                    validatorLocation.resetForm();
                    $.fn.showError(response['data']);
                }
            }).fail(function( jqXHR, textStatus, errorThrown) {
                $.fn.showError(textStatus);
            }).always(function() {
                NProgress.done();
            });
            return false;
        },
        invalidHandler: function(form, validator) {
        
        }
    });

    $('.btn-location-add').on("click", function(e){
        e.preventDefault();

        $('#form-location').attr('action', '$routeLocationAdd');
        $('#form-location #location_search').val('');
        $('#form-location #formatted_address').val('');
        $('#form-location #address1').val('');
        $('#form-location #address2').val('');
        $('#form-location #country').val('');
        $('#form-location #state').val('');
        $('#form-location #city1').val('');
        $('#form-location #city2').val('');
        $('#form-location #postal_code').val('');
        $('#form-location #latitude').val('');
        $('#form-location #longitude').val('');
        validatorLocation.resetForm();

        $("#location-box").modal('show');
    });

    $('body').on('click', 'a.btn-location-edit', function(e) {
        e.preventDefault();

        var url = $(this).data('link');

        NProgress.start();
        $.ajax({
            'dataType'  : 'json',
            'accept'    : 'application/json',
            'method'    : 'get',
            'url'       : url,
        }).done(function(response) {
           if(response['success']) {
                $('#form-location').attr('action', url);
                $('#form-location #location_search').val(response['data']['formatted_address']);
                $('#form-location #formatted_address').val(response['data']['formatted_address']);
                $('#form-location #address1').val(response['data']['address1']);
                $('#form-location #address2').val(response['data']['address2']);
                $('#form-location #country').val(response['data']['country']);
                $('#form-location #state').val(response['data']['state']);
                $('#form-location #city1').val(response['data']['city1']);
                $('#form-location #city2').val(response['data']['city2']);
                $('#form-location #postal_code').val(response['data']['postal_code']);
                $('#form-location #latitude').val(response['data']['latitude']);
                $('#form-location #longitude').val(response['data']['longitude']);

                if(response['data']['is_main'] == 'y') {
                    $('#form-location #is_main').bootstrapToggle('on')
                } else {
                    $('#form-location #is_main').bootstrapToggle('off')
                }

                validatorLocation.resetForm();
        
                $("#location-box").modal('show');
            } else {
                $.fn.showError(response['data']);
            }
        }).fail(function( jqXHR, textStatus, errorThrown) {
            $.fn.showError(textStatus);
        }).always(function() {
            NProgress.done();
        });
        return false;


    });

    $('body').on('click', 'a.btn-location-delete', function(e) {
        e.preventDefault();

        var url = $(this).data('link');

        NProgress.start();
        $.ajax({
            'dataType'  : 'json',
            'accept'    : 'application/json',
            'method'    : 'post',
            'url'       : url,
        }).done(function(response) {
           if(response['success']) {
                $.fn.renderLocation(response['data']);
            } else {
                $.fn.showError(response['data']);
            }
        }).fail(function( jqXHR, textStatus, errorThrown) {
            $.fn.showError(textStatus);
        }).always(function() {
            NProgress.done();
        });
        return false;


    });

    
    $('.btn-location-close').on("click", function(e){
        e.preventDefault();
        
        $("#location-box").modal('hide');
        return false;
    });

        var validatorCompanySize = $('#form-company-size').validate({
        debug: true,
        onclick: false,
        onkeyup: false,
        onfocusout: false,
        ignore: [],
        rules: {
            'company_size_id': {
                required: true,
            },
        },

        submitHandler: function(form)
        {
            NProgress.start();
            $.ajax({
                'dataType'  : 'json',
                'accept'    : 'application/json',
                'method'    : 'post',
                'url'       :  $('#form-company-size').attr('action'),
                'data'      :  $('#form-company-size').serialize()
            }).done(function(response) {
                if(response['success']) {

                    $('#overview-company-size').html(response['data']);
                    $("#company-size-box").modal('hide');
                } else {
                    validatorCompanySize.resetForm();
                    if(jQuery.type(response['data']) == 'string') {
                        $.fn.showError(response['data']);
                    } else  {
                        $.each(response['data'], function( fieldname, errors ) {
                            $.fn.showFormErrorValidator('#form-company-size #' + fieldname, errors);
                        });
                    }
                }
            }).fail(function( jqXHR, textStatus, errorThrown) {
                $.fn.showError(textStatus);
            }).always(function() {
                NProgress.done();
            });
            return false;
        },
        invalidHandler: function(form, validator) {
        
        }
    });


    $('.btn-company-size-edit').on("click", function(e){
        e.preventDefault();

        NProgress.start();
        $.ajax({
            'dataType'  : 'json',
            'accept'    : 'application/json',
            'method'    : 'get',
            'url'       : '$routeCompanySize',
        }).done(function(response) {
           if(response['success']) {
                                $('#form-company-size #company_size_id').val(response['data']['company_size_id']).trigger('change');
           
                validatorCompanySize.resetForm();

                $("#company-size-box").modal('show');
            } else {
                $.fn.showError(response['data']);
            }
        }).fail(function( jqXHR, textStatus, errorThrown) {
            $.fn.showError(textStatus);
        }).always(function() {
            NProgress.done();
        });
        return false;

    });
    
    $('.btn-company-size-close').on("click", function(e){
        e.preventDefault();
        
        $("#company-size-box").modal('hide');
        return false;
    });

        var validatorIndustry = $('#form-industry').validate({
        debug: true,
        onclick: false,
        onkeyup: false,
        onfocusout: false,
        ignore: [],
        rules: {
            'industry_id': {
                required: true,
            },
        },

        submitHandler: function(form)
        {
            NProgress.start();
            $.ajax({
                'dataType'  : 'json',
                'accept'    : 'application/json',
                'method'    : 'post',
                'url'       :  $('#form-industry').attr('action'),
                'data'      :  $('#form-industry').serialize()
            }).done(function(response) {
                if(response['success']) {

                    $('#overview-industry').html(response['data']);
                    $("#industry-box").modal('hide');
                } else {
                    validatorIndustry.resetForm();
                    if(jQuery.type(response['data']) == 'string') {
                        $.fn.showError(response['data']);
                    } else  {
                        $.each(response['data'], function( fieldname, errors ) {
                            $.fn.showFormErrorValidator('#form-industry #' + fieldname, errors);
                        });
                    }
                }
            }).fail(function( jqXHR, textStatus, errorThrown) {
                $.fn.showError(textStatus);
            }).always(function() {
                NProgress.done();
            });
            return false;
        },
        invalidHandler: function(form, validator) {
        
        }
    });


    $('.btn-industry-edit').on("click", function(e){
        e.preventDefault();

        NProgress.start();
        $.ajax({
            'dataType'  : 'json',
            'accept'    : 'application/json',
            'method'    : 'get',
            'url'       : '$routeIndustry',
        }).done(function(response) {
           if(response['success']) {
                                $('#form-industry #industry_id').val(response['data']['industry_id']).trigger('change');
           
                validatorIndustry.resetForm();

                $("#industry-box").modal('show');
            } else {
                $.fn.showError(response['data']);
            }
        }).fail(function( jqXHR, textStatus, errorThrown) {
            $.fn.showError(textStatus);
        }).always(function() {
            NProgress.done();
        });
        return false;

    });
    
    $('.btn-industry-close').on("click", function(e){
        e.preventDefault();
        
        $("#industry-box").modal('hide');
        return false;
    });

    $("#form-cover #cover").fileinput({
        theme: 'fas',
        language: 'es',
        showUpload: false,
        dropZoneEnabled: false,
        maxFileCount: 1,
        allowedFileExtensions: ['jpg', 'jpeg', 'png', 'gif'],
        mainClass: "input-group",
        msgPlaceholder: 'LABEL_RECOMMENDED_SIZE $image_size_cover',
    });

    CKEDITOR.replace('description');

    autocompleteLocation.addListener('place_changed', $.fn.fillInAddressLocation);

    $('#form-location #is_main').bootstrapToggle({'on' : 'LABEL_MAIN_LOCATION',  'off' : 'LABEL_SECONDARY_LOCATION', 'width' : '160px', 'height' : '40px'});
    
});

JS;
$this->inlineScript()->captureEnd();

$jsonLocations = json_encode($locations);
$js = <<<JS
const urlVars = {
    routeWebsite: "$routeWebsite",
    routeCompanySize: "$routeCompanySize",
    routeIndustry: "$routeIndustry",
    routeExtended: "$routeExtended",
    routeSocialNetworks: "$routeSocialNetworks",
    routeLocationAdd: "$routeLocationAdd",
    routeFoundationYear: "$routeFoundationYear",
    routeImageUpload: "$routeImageUpload",
    routeCoverUpload: "$routeCoverUpload",
    routeFooterUpload: "$routeFooterUpload",
    routeHeaderUpload: "$routeHeaderUpload",
    cover: "$cover",
    companyId: "$companyId",
    followers: "$follower",
    image: "$image",
    overview: "$overview",
    locations: JSON.parse('$jsonLocations'),
    industry: "$industry",
    companySize: "$company_size",
    companyName: "$company_name",
    foundationYear: "$foundation_year",
    website: "$website",
    header: "$header",
    footer: "$footer"
}
JS;

$this->inlineScript()->appendScript($js);
$this->headLink()->appendStylesheet('/react-bundles/profile/main.css');
$this->inlineScript()->appendFile('/react-bundles/profile/profileBundle.js');
?>

<style>
    .user-profile-ov {
        position: relative;
    }

    .user-profile-ov .add-dp {
        position: absolute;
        top: 30%;
        right: 10%;
    }

    .user-profile-ov .add-dp i {
        font-size: 14px;
        border: 2px solid #fff;
        background: #e44d3a;
        padding: 11px;
        color: #ffff
    }
</style>

<!-- Content Header (Page header) -->
<div id="profile">
</div>
<div class="modal" tabindex="-1" role="dialog" id="industry-box">
    <div class="modal-dialog" role="document">
        <?php
        $form = $this->formIndustry;
        $form->setAttributes([
            'method' => 'post',
            'action' => $routeIndustry,
            'name' => 'form-industry',
            'id' => 'form-industry'
        ]);
        $form->prepare();
        echo $this->form()->openTag($form);
        ?>
        <div class="modal-content">
            <div class="modal-header">
                <h3 class="modal-title">LABEL_CHANGE</h3>
            </div>
            <div class="modal-body">
                <div class="form-group">
                    <?php
                    $element = $form->get('industry_id');
                    $element->setAttributes(['class' => 'form-control']);
                    $element->setOptions(['label' => 'LABEL_INDUSTRY']);
                    echo $this->formLabel($element);
                    echo $this->formSelect($element);
                    ?>
                </div>
            </div>
            <div class="modal-footer">
                <button type="submit" class="btn btn-primary">LABEL_SAVE</button>
                <button type="button" class="btn btn-default btn-industry-close">LABEL_CANCEL</button>
            </div>
            <?php echo $this->form()->closeTag($form); ?>
        </div>
    </div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="company-size-box">
    <div class="modal-dialog" role="document">
        <?php
        $form = $this->formCompanySize;
        $form->setAttributes([
            'method' => 'post',
            'action' => $routeCompanySize,
            'name' => 'form-company-size',
            'id' => 'form-company-size'
        ]);
        $form->prepare();
        echo $this->form()->openTag($form);
        ?>
        <div class="modal-content">
            <div class="modal-header">
                <h3 class="modal-title">LABEL_CHANGE</h3>
            </div>
            <div class="modal-body">
                <div class="form-group">
                    <?php
                    $element = $form->get('company_size_id');
                    $element->setAttributes(['class' => 'form-control']);
                    $element->setOptions(['label' => 'LABEL_COMPANY_SIZE']);
                    echo $this->formLabel($element);
                    echo $this->formSelect($element);
                    ?>
                </div>
            </div>
            <div class="modal-footer">
                <button type="submit" class="btn btn-primary">LABEL_SAVE</button>
                <button type="button" class="btn btn-default btn-company-size-close">LABEL_CANCEL</button>
            </div>
            <?php echo $this->form()->closeTag($form); ?>
        </div>
    </div>
</div>
<div class="modal" tabindex="-1" role="dialog" id="location-box">
    <div class="modal-dialog" role="document">
        <?php
        $form = $this->formLocation;
        $form->setAttributes([
            'method' => 'post',
            'action' => '',
            'name' => 'form-location',
            'id' => 'form-location'
        ]);
        $form->prepare();
        echo $this->form()->openTag($form);

        $fieldnames = [
            'formatted_address',
            'address1',
            'address2',
            'country',
            'state',
            'city1',
            'city2',
            'postal_code',
            'latitude',
            'longitude',
        ];

        foreach ($fieldnames as $fieldname) {

            $element = $form->get($fieldname);
            echo $this->formHidden($element);
        }
        ?>
        <div class="modal-content">
            <div class="modal-header">
                <h3 class="modal-title">LABEL_CHANGE</h3>
            </div>
            <div class="modal-body">
                <div class="form-group datefm">
                    <?php
                    $element = $form->get('location_search');
                    $element->setAttributes(['class' => 'form-control']);
                    $element->setOptions(['label' => 'LABEL_LOCATION']);
                    echo $this->formLabel($element);
                    echo $this->formText($element);
                    ?>
                    <i class="fa fa-map-marker"></i>
                </div>
                <div class="form-group">
                    <?php
                    $element = $form->get('is_main');
                    echo $this->formCheckbox($element);
                    ?>
                </div>
            </div>
            <div class="modal-footer">
                <button type="submit" class="btn btn-primary ">LABEL_SAVE</button>
                <button type="button" class="btn btn-default btn-location-close">LABEL_CANCEL</button>
            </div>
            <?php echo $this->form()->closeTag($form); ?>
        </div>
    </div>
</div>