Jump to content

[Solucionado] Modulo de tallas


_Veronika_

Recommended Posts

Muy buenas, a ver si alguien me puede echar una manita con esto que se me ha atravesado. He instalado el modulo de Belvg para las tallas de la ropa. Y resulta que en atributos he creado un atributo que se llama Talla y como valores he puesto S M L XL 30 32 34 36... pues esto depende de como lo ponga el fabricante en la etiqueta. El módulo funciona muy bien si quieres mostrar las medidas para todas las tallas pero si solo quieres mostrar para S M L y XL el resto aparece en blanco. Entonces lo que estoy intentando hacer es que si la casilla está en blanco que no lo muestre pero no lo consigo. Este es el código original:

<tbody>
    {foreach from=$group.def_collection_ps_val item=attr name=collection}
        <tr class="{if $smarty.foreach.collection.index % 2 != 0}alt{/if}">
             <td class="ps_attr_name">{$attr.name|escape}</td>
                   {foreach from=$attr.values item=val key=key}
                      <td>{if ($val)}{$val}{else}-{/if}</td>
                   {/foreach}
             </tr>
     {/foreach}
</tbody>

Y esta es la modificación que he hecho pero no me funciona:

<tbody>
    {foreach from=$group.def_collection_ps_val item=attr name=collection}
      {if !empty($val)}
        <tr class="{if $smarty.foreach.collection.index % 2 != 0}alt{/if}">
             <td class="ps_attr_name">{$attr.name|escape}</td>
                   {foreach from=$attr.values item=val key=key}
                      <td>{$val}</td>
                   {/foreach}
             </tr>
       {/if}
     {/foreach}
</tbody>

Parece que es una modificación fácil pero se me resiste, a ver si alguien del foro me puede arrojar algo de luz a ver que estoy haciendo mal. Muchas gracias 

Edited by veronica garcia (see edit history)
Link to comment
Share on other sites

Gracias por tu respuesta @luishuaymana creo que $val viene de aquí:

    public function getBackendPreparedProductData($id_product) {
        $available_groups = $this->getAvailableGroups($id_product);
        Belvg_SizeAssistant::setMultistore();
        $array_unique = array();
        $prepare_smarty_data = array();
        foreach ($available_groups as $key => $value) {
            if (in_array($value, $array_unique)) {
                continue;
            }

            $array_unique[] = $value;
            $belvgSaGroupObj = new BelvgSAGroup($value['id_belvg_sa_group']);
            $check_exists_info = $belvgSaGroupObj->checkIsMeasured($id_product, TRUE);

            $prepare_smarty_data['groups_items_collection'][] = array(
                'name' => $value['name'],
                'id' => $value['id_belvg_sa_group'],
                'is_measured' => isset($check_exists_info['is_measured']) ? $check_exists_info['is_measured'] : FALSE,
                'is_exists' => isset($check_exists_info['id_belvg_sa_group_product']) ? $check_exists_info['id_belvg_sa_group_product'] : FALSE,
                //'def_collection' => $belvgSaGroupObj->getAttributeWithValues($this->context->language->id, $id_product),
                'def_collection' => $belvgSaGroupObj->getAttribute($this->context->language->id),
                'def_collection_ps_val' => $belvgSaGroupObj->getPsAttributeWithValuesForGrid($this->context->language->id, $id_product),
            );
        }

        return $prepare_smarty_data;
    }

    public function getFrontendPreparedProductData($id_product) {
        $groups_arr = BelvgSAGroup::getGroupsByIdProduct($id_product);
        foreach ($groups_arr as &$group) {
            $belvgSaGroupObj = new BelvgSAGroup($group['id_belvg_sa_group']);
            $group['image_url'] = '';
            if (file_exists(_PS_IMG_DIR_ . '/belvg_sa/' . $belvgSaGroupObj->id . '.jpg')) {
                $group['image_url'] = __PS_BASE_URI__ . 'img/belvg_sa/' . $belvgSaGroupObj->id . '.jpg';  
            }
            
            $group['def_collection'] = $belvgSaGroupObj->getAttribute($this->context->language->id);
            $group['def_collection_ps_val'] = $belvgSaGroupObj->getPsAttributeWithValuesForGrid($this->context->language->id, $id_product);
        }
        
        //print_r($groups_arr); die;
        return $groups_arr;
    }

Es un modulo externo que he instalado y no me aclaro

Link to comment
Share on other sites

Ok @luishuaymana Para ilustrar mejor lo que intento hacer, adjunto pantallazos:

El primero es como hace el modulo por defecto, el segundo lo más que he conseguido hacer, el tercero es con el codigo que me indicaste. En definitiva, me falta que en la primera columna no se vea nada si en la segunda y tercera no hay valores, pero nada se me resiste

322760078_tallaoriginal.jpg.0c80161d08e93442a7eb34abf7015868.jpgOriginal1808554060_tallajson.jpg.f98944edd88217698e598107ba227286.jpg

Link to comment
Share on other sites

Hola, puedes probar asi :
modifica este código a tu php :

 

    public function getFrontendPreparedProductData($id_product) {

        $filtered   = array();

        $groups_arr = BelvgSAGroup::getGroupsByIdProduct($id_product);
        foreach ($groups_arr as &$group) {
            $belvgSaGroupObj = new BelvgSAGroup($group['id_belvg_sa_group']);
            $group['image_url'] = '';
            if (file_exists(_PS_IMG_DIR_ . '/belvg_sa/' . $belvgSaGroupObj->id . '.jpg')) {
                $group['image_url'] = __PS_BASE_URI__ . 'img/belvg_sa/' . $belvgSaGroupObj->id . '.jpg';  
            }
            
            $group['def_collection'] = $belvgSaGroupObj->getAttribute($this->context->language->id);

            $verify = $belvgSaGroupObj->getPsAttributeWithValuesForGrid($this->context->language->id, $id_product);

            foreach ($verify as $key => $value) {
                foreach ($value['values'] as $v) {
                    if($v == 0){
                        $filtered[$key] = false;
                    }
                    else{
                        $filtered[$key] = true;
                    }
                }
            }
            foreach ($verify as $clave => $valor) {
                $valor['remove'] = $filtered[$clave];
                $group['def_collection_ps_val'] = $valor;
            }
        }
        
        //print_r($groups_arr); die;
        return $groups_arr;
    }

y en tu .tpl agrega esto : 

<tbody>
    {foreach from=$group.def_collection_ps_val item=attr name=collection}
      {if $attr.remove}
        <tr class="{if $smarty.foreach.collection.index % 2 != 0}alt{/if}">
             <td class="ps_attr_name">{$attr.name|escape}</td>
                   {foreach from=$attr.values item=val key=key}
                      <td>{$val}</td>
                   {/foreach}
             </tr>
       {/if}
     {/foreach}
</tbody>

La funcion se puede mejorar, pero con esto puedes lograr lo que pides..
comentanos..

 

Link to comment
Share on other sites

Si, este es el codigo desde el primer foreach y con el cambio que me dijiste

<div style="display:none">
    <div id="belvg_sizeassistant_content" class="belvgSizeassistantFancyContent">
        <div id="sizeList">
            <div class="belvgSizeListProductName">{$belvg_sa_productObj->name|escape}</div>
            <div class="belvgSizeListContent">
                {foreach from=$belvg_sa_data item=group}
                    {if !empty($group.image_url)}
                    <div class="belvgSizeListImage">
                        <img src="{$group.image_url}" title="{$group.id_belvg_sa_group|escape}" width="{if $group.image_width}{$group.image_width}{else}600{/if}" height="{if $group.image_height}{$group.image_height}{else}600{/if}" />
                    </div>
                    {/if}
                    <div class="belvgSizeListData">
                        <div id="table_values_{$group.id_belvg_sa_group_product}" class="table_values" >
                            <p class="is_measured_individually" {if !$group.is_measured && (!isset($group.is_exists) || !$group.is_exists)}style="display:none"{/if}>{l s='Product is measured individually' mod='belvg_sizeassistant'}</p>
                            <table>
                                <col>
                                {foreach from=$group.def_collection item=sa_attr}
                                    <col width="150" valign="top">
                                {/foreach}
                                <thead>
                                    <tr>
                                        <th></th>
                                        {foreach from=$group.def_collection item=sa_attr}
                                            <th>{$sa_attr.name|escape}</th>
                                        {/foreach}
                                    </tr>
                                </thead>
<tbody>
    {foreach from=$group.def_collection_ps_val item=attr name=collection}
      {if $attr.remove}
        <tr class="{if $smarty.foreach.collection.index % 2 != 0}alt{/if}">
             <td class="ps_attr_name">{$attr.name|escape}</td>
                   {foreach from=$attr.values item=val key=key}
                      <td>{$val}</td>
                   {/foreach}
             </tr>
       {/if}
     {/foreach}
</tbody>
                            </table>
                        </div>
                    </div>
                {/foreach}
            </div>
        </div>
    </div>
</div>

 

Link to comment
Share on other sites


if (!defined('_PS_VERSION_')) {
    exit;
}

require_once(dirname(__FILE__) . '/classes/BelvgSAGroup.php');
require_once(dirname(__FILE__) . '/classes/BelvgSAAttribute.php');

class Belvg_SizeAssistant extends Module {

    public function __construct() {
        $this->name = 'belvg_sizeassistant';
        $this->tab = 'front_office_features';
        $this->version = '2.0.0';
        $this->author = 'BelVG';
        $this->need_instance = 0;
        $this->module_key = 'da22ecce04778039b65ddb25d65f7e3a';
        $this->bootstrap = TRUE;

        parent::__construct();

        $this->displayName = $this->l('Size Assistant');
        $this->description = $this->l('Size Assistant allows creating visual and clear size guides for groups of products or particular items. Package for PrestaShop v.1.6.x');
    }

    public function install() {
        if (!parent::install() OR
                !$this->registerHook('displayHeader') OR
                !$this->registerHook('displayProductButtons') OR
                !$this->registerHook('displayRightColumnProduct') OR
                !$this->registerHook('actionAttributeDelete') OR
                !$this->registerHook('actionAttributeGroupDelete') OR
                !$this->registerHook('displayAdminProductsExtra') OR
                !$this->registerHook('actionProductUpdate')
        ) {
            return FALSE;
        }

        include(dirname(__FILE__) . '/init/install_sql.php');
        foreach ($sql as $s) {
            if (!Db::getInstance()->Execute($s)) {
                return FALSE;
            }
        }

        //make a new dir "belvg_sa"
        $images_dir = _PS_IMG_DIR_ . 'belvg_sa/';
        if (!file_exists($images_dir)) {
            mkdir($images_dir, 0777);
        }

        $new_tab = new Tab();
        $new_tab->class_name = 'AdminSizeAssistant';
        $new_tab->id_parent = Tab::getCurrentParentId();
        $new_tab->module = $this->name;
        $languages = Language::getLanguages();
        foreach ($languages as $language) {
            $new_tab->name[$language['id_lang']] = 'Belvg Size Assistant';
        }

        $new_tab->add();

        return TRUE;
    }

    public function uninstall() {
        include(dirname(__FILE__) . '/init/uninstall_sql.php');
        foreach ($sql as $s) {
            if (!Db::getInstance()->Execute($s)) {
                return FALSE;
            }
        }

        //delete dir "belvg_sa"
        $images_dir = _PS_IMG_DIR_ . 'belvg_sa/';
        if (!file_exists($images_dir)) {
            mkdir($images_dir, 0777);
        }

        $idTabs = array();
        $idTabs[] = Tab::getIdFromClassName('AdminSizeAssistant');
        foreach ($idTabs as $idTab) {
            if ($idTab) {
                $tab = new Tab($idTab);
                $tab->delete();
            }
        }

        if (!parent::uninstall()) {
            return FALSE;
        }

        return TRUE;
    }
    
    public function getAvailableGroups($id_product) {
        $product_obj = new Product($id_product, TRUE, $this->context->language->id);
        //BelvgSAGroup::checkDataIntegrity($id_product);
        $available_groups = array();
        foreach ($product_obj->getAttributesGroups($this->context->language->id) as $attr) {
            $pre_sa_groups = BelvgSAGroup::getGroupByPsAttributeGroup($attr['id_attribute_group']);
            if (!empty($pre_sa_groups)) {
                foreach ($pre_sa_groups as $pre_sa_group) {
                    $available_groups[] = $pre_sa_group;
                }
            }
        }
        
        return $available_groups;
    }

    public function getBackendPreparedProductData($id_product) {
        $available_groups = $this->getAvailableGroups($id_product);
        Belvg_SizeAssistant::setMultistore();
        $array_unique = array();
        $prepare_smarty_data = array();
        foreach ($available_groups as $key => $value) {
            if (in_array($value, $array_unique)) {
                continue;
            }

            $array_unique[] = $value;
            $belvgSaGroupObj = new BelvgSAGroup($value['id_belvg_sa_group']);
            $check_exists_info = $belvgSaGroupObj->checkIsMeasured($id_product, TRUE);

            $prepare_smarty_data['groups_items_collection'][] = array(
                'name' => $value['name'],
                'id' => $value['id_belvg_sa_group'],
                'is_measured' => isset($check_exists_info['is_measured']) ? $check_exists_info['is_measured'] : FALSE,
                'is_exists' => isset($check_exists_info['id_belvg_sa_group_product']) ? $check_exists_info['id_belvg_sa_group_product'] : FALSE,
                //'def_collection' => $belvgSaGroupObj->getAttributeWithValues($this->context->language->id, $id_product),
                'def_collection' => $belvgSaGroupObj->getAttribute($this->context->language->id),
                'def_collection_ps_val' => $belvgSaGroupObj->getPsAttributeWithValuesForGrid($this->context->language->id, $id_product),
            );
        }

        return $prepare_smarty_data;
    }

    public function getFrontendPreparedProductData($id_product) {

        $filtered   = array();

        $groups_arr = BelvgSAGroup::getGroupsByIdProduct($id_product);
        foreach ($groups_arr as &$group) {
            $belvgSaGroupObj = new BelvgSAGroup($group['id_belvg_sa_group']);
            $group['image_url'] = '';
            if (file_exists(_PS_IMG_DIR_ . '/belvg_sa/' . $belvgSaGroupObj->id . '.jpg')) {
                $group['image_url'] = __PS_BASE_URI__ . 'img/belvg_sa/' . $belvgSaGroupObj->id . '.jpg';  
            }
            
            $group['def_collection'] = $belvgSaGroupObj->getAttribute($this->context->language->id);

            $verify = $belvgSaGroupObj->getPsAttributeWithValuesForGrid($this->context->language->id, $id_product);

            foreach ($verify as $key => $value) {
                foreach ($value['values'] as $v) {
                    if($v == 0){
                        $filtered[$key] = false;
                    }
                    else{
                        $filtered[$key] = true;
                    }
                }
            }
            foreach ($verify as $clave => $valor) {
                $valor['remove'] = $filtered[$clave];
                $group['def_collection_ps_val'] = $valor;
            }
        }
        
        //print_r($groups_arr); die;
        return $groups_arr;
    }

    public function hookDisplayHeader() {
        $this->context->controller->addCSS(($this->_path) . 'css/styles.css', 'all');
    }

    public function hookDisplayAdminProductsExtra($params) {
        $id_product = Tools::getValue('id_product');
        $groups_arr = BelvgSAGroup::getGroupsByIdProduct($id_product);
        $template_path = dirname(__FILE__) . '/views/templates/admin/size_assistant/admin_products.tpl';
        $data = $this->context->smarty->createTemplate($template_path);

        $prepare_smarty_data = $this->getBackendPreparedProductData($id_product);

        $data->assign(array(
            'belvg_sa_data' => $prepare_smarty_data,
            //'belvg_bg_errors' => ((isset($this->context->cookie->belvg_bg_errors) && !empty($this->context->cookie->belvg_bg_errors)) ? $this->context->cookie->belvg_bg_errors : ''),
        ));

        return $data->fetch();
    }
    
    public function sanitizeProductValues($id_product) {
        $sql_delete = 'DELETE FROM `' . _DB_PREFIX_ . 'belvg_sa_attribute_value_product` WHERE id_product = ' . (int)$id_product;
        Db::getInstance()->Execute($sql_delete);
        BelvgSAGroup::clearProductAssociationWithGroups($id_product);
    }

    public function hookActionProductUpdate($params) {
        $id_product = Tools::getValue('id_product');
        $groups_id = Tools::getValue('group_id', array());
        $measured_groups = Tools::getValue('is_measured', array());
        $product_vals = Tools::getValue('product_val');
        //assign product with group
        BelvgSAGroup::assignProductWithGroup($groups_id, $id_product, $measured_groups);
        $available_groups = $this->getAvailableGroups($id_product);
        if (empty($available_groups)) {
            $this->sanitizeProductValues($id_product);
            return TRUE;
        }

        foreach ($groups_id as $group_id) {
            //if product has been measured for this group
            if (in_array($group_id, $measured_groups)) {
                foreach ($product_vals[$group_id] as $id_belvg_sa_attribute => $attribute_values) {
                    $attr_obj = new BelvgSAAttribute($id_belvg_sa_attribute);
                    foreach ($attribute_values as $id_ps_attribute => $attribute_value) {
                        $attr_obj->addProductValue($id_product, $id_ps_attribute, $attribute_value);
                    }
                }
            }
        }

        /* print_r($params); 
          print_r("--------------------------------------------------");
          print_r($_POST); die; */
    }

    public function hookDisplayRightColumnProduct($params) {
        $id_product = Tools::getValue('id_product');
        $prepare_smarty_data = $this->getFrontendPreparedProductData($id_product);

        $this->smarty->assign(array(
            'belvg_sa_data' => $prepare_smarty_data,
            'belvg_sa_productObj' => $group['productObj'] = new Product($id_product, FALSE, $this->context->language->id)
        ));

        return $this->display(__FILE__, 'views/templates/frontend/product_page_link.tpl');
    }

    public function hookActionAttributeDelete($params) {
        //DEFAULT VALUES
        $sql = 'SELECT id_belvg_sa_attribute_value FROM `' . _DB_PREFIX_ . 'belvg_sa_attribute_value` sa_a_v
                WHERE sa_a_v.id_attribute = ' . (int) $params['id_attribute'];
        $attribute_value_ids = Db::getInstance()->ExecuteS($sql);

        if (!empty($attribute_value_ids)) {
            $ids_array = array();

            foreach ($attribute_value_ids as $value_id) {
                $ids_array[] = $value_id['id_belvg_sa_attribute_value'];
            }

            $ids_str = implode(",", $ids_array);
            $sql = 'DELETE FROM `' . _DB_PREFIX_ . 'belvg_sa_attribute_value` WHERE id_belvg_sa_attribute_value IN (' . $ids_str . ')';
            Db::getInstance()->Execute($sql);
        }

        //PRODUCT VALUES
        $sql = 'SELECT id_belvg_sa_attribute_value_product FROM `' . _DB_PREFIX_ . 'belvg_sa_attribute_value_product` sa_a_v_p
                WHERE sa_a_v_p.id_attribute = ' . (int) $params['id_attribute'];
        $attribute_value_ids = Db::getInstance()->ExecuteS($sql);

        if (!empty($attribute_value_ids)) {
            $ids_array = array();

            foreach ($attribute_value_ids as $value_id) {
                $ids_array[] = $value_id['id_belvg_sa_attribute_value'];
            }

            $ids_str = implode(",", $ids_array);
            $sql = 'DELETE FROM `' . _DB_PREFIX_ . 'belvg_sa_attribute_value_product` WHERE id_belvg_sa_attribute_value_product IN (' . $ids_str . ')';
            Db::getInstance()->Execute($sql);
        }
    }

    public function hookActionAttributeGroupDelete($params) {
        $sql = 'SELECT id_belvg_sa_group FROM `' . _DB_PREFIX_ . 'belvg_sa_group` sa_g 
                WHERE sa_g.id_attribute_group = ' . (int) $params['id_attribute_group'];
        $sa_group_ids = Db::getInstance()->ExecuteS($sql);

        foreach ($sa_group_ids as $group_id) {
            $group_obj = new BelvgSAGroup($group_id['id_belvg_sa_group']);
            $group_obj->delete();
        }
    }

    protected function removeDir($path) {
        if (file_exists($path) && is_dir($path)) {
            $dirHandle = opendir($path);
            while (FALSE !== ($file = readdir($dirHandle))) {
                $tmpPath = $path . '/' . $file;
                @chmod($tmpPath, 0777);
                if (is_dir($tmpPath)) {
                    $this->removeDir($tmpPath);
                } else {
                    if (!unlink($tmpPath)) {
                        return FALSE;
                    }
                }
            }

            closedir($dirHandle);
        } else {
            return FALSE;
        }

        return TRUE;
    }
    
    public static function setMultistore() {
        $shopCollection = Shop::getShopsCollection();
        Shop::setContext(Shop::CONTEXT_SHOP, $shopCollection->getFirst()->id);
    }
    
}

 

Link to comment
Share on other sites

    public function getFrontendPreparedProductData($id_product) {

        $filtered   = array();
        $ready      = array();
        $newData    = array(); 

        $groups_arr = BelvgSAGroup::getGroupsByIdProduct($id_product);
        foreach ($groups_arr as &$group) {
            $belvgSaGroupObj = new BelvgSAGroup($group['id_belvg_sa_group']);
            $group['image_url'] = '';
            if (file_exists(_PS_IMG_DIR_ . '/belvg_sa/' . $belvgSaGroupObj->id . '.jpg')) {
                $group['image_url'] = __PS_BASE_URI__ . 'img/belvg_sa/' . $belvgSaGroupObj->id . '.jpg';  
            }
            
            $group['def_collection'] = $belvgSaGroupObj->getAttribute($this->context->language->id);

            $group['def_collection_ps_val'] = $belvgSaGroupObj->getPsAttributeWithValuesForGrid($this->context->language->id, $id_product);

        }
       
        foreach ($groups_arr as $group) {
            foreach ($group['def_collection_ps_val'] as $key => $value) {

                foreach ($value['values'] as $v) {
                    if($v == 0){
                        $filtered[$key] = false;
                    }
                    else{
                        $filtered[$key] = true;
                    }
                }
            }
        }

        foreach ($groups_arr as $i => $group) {
        
            $ready[$i] = $group;

            foreach ($group['def_collection_ps_val'] as $clave => $valor) {
                $valor['remove'] = $filtered[$clave];

                $ready[$i]['def_collection_ps_val'] = $valor;
            }


        }
        

        //print_r($groups_arr); die;
        // return $groups_arr;
        return $ready;
    }

... 

Link to comment
Share on other sites

Hola, esta solución puede mejorar pero cumple lo que necesita.
Edite su función getFrontendPreparedProductData en el archivo belvg_sizeassistant.php por:

public function getFrontendPreparedProductData($id_product) {
        $groups_arr = BelvgSAGroup::getGroupsByIdProduct($id_product);
        foreach ($groups_arr as &$group) {
            $belvgSaGroupObj = new BelvgSAGroup($group['id_belvg_sa_group']);
            $group['image_url'] = '';
            if (file_exists(_PS_IMG_DIR_ . '/belvg_sa/' . $belvgSaGroupObj->id . '.jpg')) {
                $group['image_url'] = __PS_BASE_URI__ . 'img/belvg_sa/' . $belvgSaGroupObj->id . '.jpg';  
            }
            
            $group['def_collection'] = $belvgSaGroupObj->getAttribute($this->context->language->id);
            $group['def_collection_ps_val'] = $belvgSaGroupObj->getPsAttributeWithValuesForGrid($this->context->language->id, $id_product);
        }

        $filtered       = array();
        $collection     = array();
        $groupFiltered  = array();
        foreach ($groups_arr as $de => $ga) {
            foreach ($ga['def_collection_ps_val'] as $key => $dcpv) {
                foreach ($dcpv['values'] as $clave => $v) {
                    if($v == 0){
                        $filtered[$key] = false;
                    }
                    else{
                        $filtered[$key] = true;
                    }
                    
                }
                $dcpv['remove'] = $filtered[$key];
                $collection[] = $dcpv;
            }
            $ga['def_collection_ps_val_2'] = $collection;
            $groupFiltered[] = $ga;
        }
        
        return $groupFiltered;
        // return $groups_arr;
    }

y en su tpl cambie a esto.:

 

<tbody>
  {foreach from=$group.def_collection_ps_val_2 item=attr name=collection}
  {if $attr.remove}
  <tr class="{if $smarty.foreach.collection.index % 2 != 0}alt{/if}">
    <td class="ps_attr_name">{$attr.name|escape}</td>
    {foreach from=$attr.values item=val key=key}
    <td>{if ($val)}{$val}{else}-{/if}</td>
    {/foreach}
  </tr>
  {/if}
  {/foreach}
</tbody>

Listo. si te sirvió pon solucionado.

 

 

  • Thanks 1
Link to comment
Share on other sites

  • _Veronika_ changed the title to [Solucionado] Modulo de tallas

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...