2023-05-16 10:50:42 +08:00

138 lines
4.8 KiB
PHP

<?php
/**
* Get not imported stories.
*
* @param array $libraries
* @param int $libID
* @param int $projectID
* @param int $productID
* @param string $orderBy
* @param string $browseType
* @param int $queryID
* @access public
* @return array
*/
public function getNotImported($libraries, $libID, $projectID, $productID, $orderBy = 'id_desc', $browseType = '', $queryID = 0)
{
$query = '';
if($browseType == 'bysearch')
{
if($queryID)
{
$this->session->set('projectstoryQuery', ' 1 = 1');
$query = $this->loadModel('search')->getQuery($queryID);
if($query)
{
$this->session->set('projectstoryQuery', $query->sql);
$this->session->set('projectstoryForm', $query->form);
}
}
else
{
if($this->session->projectstoryQuery == false) $this->session->set('projectstoryQuery', ' 1 = 1');
}
$query = $this->session->projectstoryQuery;
$allLib = "`lib` = 'all'";
$withAllLib = strpos($query, $allLib) !== false;
if($withAllLib) $query = str_replace($allLib, 1, $query);
if(!$withAllLib) $query .= " AND `lib` = '$libID'";
}
$stories = $this->dao->select('*')->from(TABLE_STORY)
->where('deleted')->eq(0)
->andWhere('status')->eq('active')
->andWhere('lib')->in(array_keys($libraries))
->beginIF($browseType != 'bysearch')->andWhere('lib')->eq($libID)->fi()
->beginIF($browseType == 'bysearch')->andWhere($query)->fi()
->orderBy($orderBy)
->fetchAll('id');
$imported = $this->dao->select('t1.fromStory,t1.fromVersion')->from(TABLE_STORY)->alias('t1')
->leftJoin(TABLE_PROJECTSTORY)->alias('t2')->on('t1.id=t2.story')
->where('t1.lib')->eq(0)
->andWhere('t1.fromStory')->ne(0)
->andWhere('t1.product')->eq($productID)
->andWhere('t2.project')->eq($projectID)
->andWhere('t1.deleted')->eq(0)
->orderBy('t1.fromVersion_asc')
->fetchPairs();
if(empty($imported)) return $stories;
foreach($stories as $story)
{
if(!isset($imported[$story->id])) continue;
if($story->version == $imported[$story->id]) unset($stories[$story->id]);
}
return $stories;
}
/**
* Import from library.
*
* @param int $projectID
* @param int $productID
* @access public
* @return void
*/
public function importFromLib($projectID, $productID)
{
$this->loadModel('story');
$this->loadModel('action');
$data = fixer::input('post')->get();
$storyIdList = $data->storyIdList;
$branches = isset($data->branches) ? $data->branches : array();
$storyList = $this->dao->select('*')->from(TABLE_STORY)->where('id')->in(array_keys($storyIdList))->fetchAll('id');
$lastOrder = $this->dao->select('*')->from(TABLE_PROJECTSTORY)->where('project')->eq($projectID)->orderBy('order_desc')->fetchPairs('story', 'order');
$storyContent = $this->dao->select('story,spec,verify')->from(TABLE_STORYSPEC)->where('story')->in(array_keys($storyIdList))->fetchAll('story');
$now = helper::now();
foreach($storyList as $id => $story)
{
$story->product = $productID;
$story->branch = isset($branches[$id]) ? $branches[$id] : 0;
$story->status = 'active';
$story->fromVersion = $story->version;
$story->version = 1;
$story->fromStory = $story->id;
$story->openedBy = $this->app->user->account;
$story->openedDate = $now;
$fromLib = $story->lib;
$needUnsetFields = array('lib','id','lastEditedBy','lastEditedDate','assignedTo','assignedDate','approvedDate');
foreach($needUnsetFields as $field) unset($story->$field);
$this->dao->insert(TABLE_STORY)->data($story)->autoCheck()->exec();
if(dao::isError())
{
echo js::error(dao::getError());
die(js::reload('parent'));
}
$storyID = $this->dao->lastInsertID();
$data = new stdclass();
$data->project = $projectID;
$data->product = $productID;
$data->story = $storyID;
$data->version = 1;
$data->order = reset($lastOrder) + 1;
$this->dao->insert(TABLE_PROJECTSTORY)->data($data)->exec();
$content = $storyContent[$id];
$specData = new stdclass();
$specData->story = $storyID;
$specData->version = 1;
$specData->title = $story->title;
$specData->spec = $content->spec;
$specData->verify = $content->verify;
$this->dao->insert(TABLE_STORYSPEC)->data($specData)->exec();
$this->story->setStage($storyID);
$this->action->create('story', $storyID, 'importfromstorylib', '', $fromLib);
}
}