Skip to content

Commit

Permalink
SFA-5114: Updated tidbit to support product_categories/product_templa…
Browse files Browse the repository at this point in the history
…tes (#91)
  • Loading branch information
jbarlowsugar authored and Gabriel L. Rael committed Aug 17, 2017
1 parent 0b60a23 commit 3d8e311
Show file tree
Hide file tree
Showing 4 changed files with 169 additions and 1 deletion.
2 changes: 1 addition & 1 deletion bootstrap.php
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@

$recordsPerPage = 1000; // Are we going to use this?
$insertBatchSize = 0; // zero means use default value provided by storage adapter
$moduleUsingGenerators = array('KBContents', 'Categories', 'SugarFavorites');
$moduleUsingGenerators = array('KBContents', 'Categories', 'SugarFavorites', 'ProductCategories');


if (isset($opts['l']) && !isset($opts['profile'])) {
Expand Down
9 changes: 9 additions & 0 deletions config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,17 @@
'KBContents' => 1000,
// Will be set by SugarFavorites Generator class
'SugarFavorites' => 1000,
'ProductCategories' => 1000,
);

/*
* The number of product templates per level. The total number is the number of categories
* times the number of products.
*
* example: 1000 categories * 10 templates per level = 10,000 templates
*/
$productTemplatesPerLevel = 3;

/*
* When using --allmodules this is the number of records to create per-module
* when the module is not defined in the $modules array.
Expand Down
40 changes: 40 additions & 0 deletions config/data/ProductCategories.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

/*********************************************************************************
* Tidbit is a data generation tool for the SugarCRM application developed by
* SugarCRM, Inc. Copyright (C) 2004-2016 SugarCRM Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo. If the display of the logo is not reasonably feasible for
* technical reasons, the Appropriate Legal Notices must display the words
* "Powered by SugarCRM".
********************************************************************************/

$GLOBALS['dataTool']['ProductCategories']['list_order'] = array('value' => 0);
$GLOBALS['dataTool']['ProductCategories']['description'] = array('value' => '');
$GLOBALS['dataTool']['ProductCategories']['parent_id'] = array('value' => null);
119 changes: 119 additions & 0 deletions src/Generator/ProductCategories.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
<?php

/*********************************************************************************
* Tidbit is a data generation tool for the SugarCRM application developed by
* SugarCRM, Inc. Copyright (C) 2004-2016 SugarCRM Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo. If the display of the logo is not reasonably feasible for
* technical reasons, the Appropriate Legal Notices must display the words
* "Powered by SugarCRM".
********************************************************************************/

namespace Sugarcrm\Tidbit\Generator;

use Sugarcrm\Tidbit\StorageAdapter\Storage\Common as StorageCommon;

class ProductCategories extends Common
{

/** @var int nesting level for the categories */
public $nestingLevel = 10;

/** @var int number of product templates per level */
public $templateNumber = 3;

/**
* Data generator.
*
*/
public function generate()
{
global $productTemplatesPerLevel;
if ($productTemplatesPerLevel) {
$this->templateNumber = $productTemplatesPerLevel;
}
echo "\n\tInserting " . $this->recordsNumber . ' rows, nested up to ' . $this->nestingLevel . ' deep.';
echo "\n\tInserting " . $this->templateNumber . ' Product Templates per category, ';
echo $this->recordsNumber * $this->templateNumber . ' total... ';
$categoriesCounter = 0;
while ($categoriesCounter < $this->recordsNumber) {
$rootId = $this->createInsertRecord('ProductCategories', 'parent_id');
for ($pt = 0; $pt < $this->templateNumber; $pt++) {
$this->createInsertRecord('ProductTemplates', 'category_id', $rootId);
}
$categoriesCounter++;
for ($i = 1; $i < $this->nestingLevel && ($categoriesCounter < $this->recordsNumber); $i++) {
$leafId = $this->createInsertRecord('ProductCategories', 'parent_id', $rootId);
$categoriesCounter++;
for ($pt = 0; $pt < $this->templateNumber; $pt++) {
$this->createInsertRecord('ProductTemplates', 'category_id', $leafId);
}
}
}
}

/**
* Remove generated data from DB.
*/
public function clearDB()
{
$this->db->query("DELETE FROM product_categories WHERE id LIKE 'seed-%'");
$this->db->query("DELETE FROM product_templates WHERE id LIKE 'seed-%'");
}

/**
* Remove all data from the tables of DB affected by generator.
*/
public function obliterateDB()
{
$this->db->query($this->getTruncateTableSQL('product_categories'));
$this->db->query($this->getTruncateTableSQL('product_templates'));
}


/**
* Add insert record and return id of it.
*
* @param string $module Module name to create insert record for
* @param string $parent_column The parent column to use
* @param string $parent the parent ID
*/
private function createInsertRecord($module, $parent_column, $parent = null)
{
$dataTool = $this->getDataToolForModel($module, $this->modelCounter++);
if ($parent != null) {
$dataTool->installData[$parent_column] = $parent;
}

$this->getInsertBuffer($dataTool->table_name)->addInstallData($dataTool->installData);
$this->insertCounter++;

return $dataTool->installData['id'];
}
}

0 comments on commit 3d8e311

Please sign in to comment.