Joomla 1.5 + Joomleague 1.6
Делал недавно людям возможность импорта игроков и персонала с предыдущих турниров, так что бы сохранялись позиции, номера, фото... вообщем все.
Если позиций не создано или каких то нет, которые есть в проекте из которого импортируются игроки и персонал, они автоматически создаются.
Когда в турнире просматриваешь состав или персонал какой-либо команды, вверху появляется поле, где можно выбрать турнир с которого произвести импорт игроков или персонал, и кнопка импортировать.
Затронуто 4 файла по игрокам и аналогично 4 файла по персоналу.
Игроки:
1. \administrator\components\com_joomleague\controllers\teamplayer.php
написана и добавлена функция
function import()
{
$db =& JFactory::getDBO();
$option='com_joomleague';
$mainframe =& JFactory::getApplication();
$project_id=$mainframe->getUserState($option.'project');
$p_team_id=$mainframe->getUserState($option.'project_team_id',0);
//$team_id = $mainframe->getUserState( $option . 'team' );
$newproject_id=JRequest::getVar('newp');
$qptnew="SELECT pn.id FROM `#__joomleague_project_team` AS pp LEFT JOIN `#__joomleague_project_team` AS pn ON pn.project_id='".$newproject_id."' AND pn.team_id=pp.team_id WHERE pp.id='".$p_team_id."' LIMIT 1";
$db->setQuery($qptnew);
$ptnew=$db->loadResult();
//echo $ptnew;
$query = "INSERT IGNORE INTO #__joomleague_project_position SELECT '','".$project_id."',pp.position_id,pp.modified,pp.modified_by FROM #__joomleague_project_position AS pp LEFT JOIN #__joomleague_position AS p ON p.id=pp.position_id WHERE pp.project_id='".$newproject_id."' AND p.persontype='1'";
$db->setQuery($query);
$db->query();
$q1="SELECT pp.id AS ppid,pn.id AS pnid, p.name AS name FROM `#__joomleague_project_position` AS pp LEFT JOIN #__joomleague_position AS p ON p.id=pp.position_id LEFT JOIN `#__joomleague_project_position` AS pn ON pn.position_id=pp.position_id AND pn.project_id='".$project_id."' WHERE pp.project_id='".$newproject_id."' AND p.persontype='1'";
$db->setQuery($q1);
//echo $q1.'<br>';
//$this->_db->setQuery($q1);
$result=$db->loadObjectList();
foreach ($result as $position){
$q2="INSERT IGNORE INTO `#__joomleague_team_player` (`projectteam_id`,`person_id`,`project_position_id`,`active`,`jerseynumber`,`notes`,`picture`,`extended`,`injury`,`injury_date`,`injury_end`,`injury_detail`,`injury_date_start`,`injury_date_end`,`suspension`,`suspension_date`,`suspension_end`,`suspension_detail`,`susp_date_start`,`susp_date_end`,`away`,`away_date`,`away_end`,`away_detail`,`away_date_start`,`away_date_end`,`published`,`ordering`,`checked_out`,`checked_out_time`,`modified`,`modified_by`)
SELECT '".$p_team_id."',`person_id`,'".$position->pnid."',`active`,`jerseynumber`,`notes`,`picture`,`extended`,`injury`,`injury_date`,`injury_end`,`injury_detail`,`injury_date_start`,`injury_date_end`,`suspension`,`suspension_date`,`suspension_end`,`suspension_detail`,`susp_date_start`,`susp_date_end`,`away`,`away_date`,`away_end`,`away_detail`,`away_date_start`,`away_date_end`,`published`,`ordering`,`checked_out`,`checked_out_time`,`modified`,`modified_by`
FROM `#__joomleague_team_player` WHERE projectteam_id='".$ptnew."' AND project_position_id='".$position->ppid."'";
$db->setQuery($q2);
$db->query();
//echo $q2.'<br>';
if (mysql_affected_rows()>0) echo $position->name." импортированы успешно! - ";
}
$this->display();
}
2. \administrator\components\com_joomleague\views\teamplayers\view.html.php
в функцию function _displayDefault( $tpl ) добавлена передача в шаблон переменных
$this->assignRef( 'project_id', $project_id );
$this->assignRef( 'plist', $this->get('ProjectsBySportsType') );
3. \administrator\components\com_joomleague\views\teamplayers\tmpl\default.php
в шаблон добавлено то самое поле
<fieldset class="adminform">
<legend>
Импортировать состав
</legend>
<form name="import1" action="<?php echo JURI::root(); ?>administrator/index.php?option=com_joomleague&controller=teamplayer&view=teamplayers&task=import" method="post">
<input type="hidden" name="projectteam_id" id="projectteam_id" value="<?php echo $this->teamws->id; ?>" />
<table>
<tr>
<td>выбирите турнир: <?php
//build the HTML select list for projects
$projects[]=JHTML::_('select.option','0','выбирите турнир','id','name');
//check if the season filter is set and select the needed projects
$res = $this->plist;
$projects=array_merge($projects,$res);
echo JHTML::_('select.genericList',
$projects,
'newp',
'class="inputbox" style="width:100%"',
'id',
'name');
//echo $lists['projects']; ?></td>
</tr>
<tr>
<td><button type="submit" onclick="this.form.submit(); " value="import">Импортировать</button></td>
<input type="hidden" name="search_mode" value="<?php echo $this->lists['search_mode'];?>" id="search_mode" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="filter_order" value="<?php echo $this->lists['order']; ?>" />
<input type="hidden" name="filter_order_Dir" value="" />
</tr>
</table>
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</fieldset>
4. \administrator\components\com_joomleague\models\teamplayers.php
в модель добавлена функция - ! sports_type_id - это id вида спорта, ставьте свое значение
function getProjectsBySportsType()
{
$query = "SELECT id, name FROM #__joomleague_project as p
WHERE sports_type_id=1
AND published=1 ";
if ($season) {
$query .= ' AND season_id = '.(int) $season;
}
$query .= " ORDER BY p.ordering, p.name ASC ";
$this->_db->setQuery($query);
if (!$result = $this->_db->loadObjectList())
{
$this->setError($this->_db->getErrorMsg());
return false;
}
return $result;
}
Персонал:
1. \administrator\components\com_joomleague\controllers\teamstaff.php
написана и добавлена функция
function import()
{
$db =& JFactory::getDBO();
$option='com_joomleague';
$mainframe =& JFactory::getApplication();
$project_id=$mainframe->getUserState($option.'project');
$p_team_id=$mainframe->getUserState($option.'project_team_id',0);
//$team_id = $mainframe->getUserState( $option . 'team' );
$newproject_id=JRequest::getVar('newp');
$qptnew="SELECT pn.id FROM `#__joomleague_project_team` AS pp LEFT JOIN `#__joomleague_project_team` AS pn ON pn.project_id='".$newproject_id."' AND pn.team_id=pp.team_id WHERE pp.id='".$p_team_id."' LIMIT 1";
$db->setQuery($qptnew);
$ptnew=$db->loadResult();
//echo $ptnew;
$query = "INSERT IGNORE INTO #__joomleague_project_position SELECT '','".$project_id."',pp.position_id,pp.modified,pp.modified_by FROM #__joomleague_project_position AS pp LEFT JOIN #__joomleague_position AS p ON p.id=pp.position_id WHERE pp.project_id='".$newproject_id."' AND p.persontype>1";
$db->setQuery($query);
$db->query();
$q1="SELECT pp.id AS ppid,pn.id AS pnid, p.name AS name FROM `#__joomleague_project_position` AS pp LEFT JOIN #__joomleague_position AS p ON p.id=pp.position_id LEFT JOIN `#__joomleague_project_position` AS pn ON pn.position_id=pp.position_id AND pn.project_id='".$project_id."' WHERE pp.project_id='".$newproject_id."' AND p.persontype>1";
$db->setQuery($q1);
//echo $q1.'<br>';
//$this->_db->setQuery($q1);
$result=$db->loadObjectList();
foreach ($result as $position){
$q2="INSERT IGNORE INTO `#__joomleague_team_staff` (`projectteam_id`,`person_id`,`project_position_id`,`active`,`notes`,`injury`,`injury_date`,`injury_end`,`injury_detail`,`injury_date_start`,`injury_date_end`,`suspension`,`suspension_date`,`suspension_end`,`suspension_detail`,`susp_date_start`,`susp_date_end`,`away`,`away_date`,`away_end`,`away_detail`,`away_date_start`,`away_date_end`,`picture`,`extended`,`published`,`ordering`,`checked_out`,`checked_out_time`,`modified`,`modified_by`)
SELECT '".$p_team_id."',`person_id`,'".$position->pnid."',`active`,`notes`,`injury`,`injury_date`,`injury_end`,`injury_detail`,`injury_date_start`,`injury_date_end`,`suspension`,`suspension_date`,`suspension_end`,`suspension_detail`,`susp_date_start`,`susp_date_end`,`away`,`away_date`,`away_end`,`away_detail`,`away_date_start`,`away_date_end`,`picture`,`extended`,`published`,`ordering`,`checked_out`,`checked_out_time`,`modified`,`modified_by`
FROM `#__joomleague_team_staff` WHERE projectteam_id='".$ptnew."' AND project_position_id='".$position->ppid."'";
$db->setQuery($q2);
$db->query();
//echo $q2.'<br>';
if (mysql_affected_rows()>0) echo $position->name." импортированы успешно! - ";
}
$this->display();
}
2. \administrator\components\com_joomleague\views\teamstaff\view.html.php
в функцию function _displayDefault( $tpl ) добавлена передача в шаблон переменных
$this->assignRef( 'project_id', $project_id );
$this->assignRef( 'plist', $this->get('ProjectsBySportsType') );
3. \administrator\components\com_joomleague\views\teamstaff\tmpl\default.php
в шаблон добавлено то самое поле
<fieldset class="adminform">
<legend>
Импортировать состав
</legend>
<form name="import1" action="<?php echo JURI::root(); ?>administrator/index.php?option=com_joomleague&controller=teamstaff&view=teamstaffs&task=import" method="post">
<input type="hidden" name="projectteam_id" id="projectteam_id" value="<?php echo $this->teamws->id; ?>" />
<table>
<tr>
<td>выбирите турнир: <?php
//build the HTML select list for projects
$projects[]=JHTML::_('select.option','0','выбирите турнир','id','name');
//check if the season filter is set and select the needed projects
$res = $this->plist;
$projects=array_merge($projects,$res);
echo JHTML::_('select.genericList',
$projects,
'newp',
'class="inputbox" style="width:100%"',
'id',
'name');
//echo $lists['projects']; ?></td>
</tr>
<tr>
<td><button type="submit" onclick="this.form.submit(); " value="import">Импортировать</button></td>
<input type="hidden" name="search_mode" value="<?php echo $this->lists['search_mode'];?>" id="search_mode" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="filter_order" value="<?php echo $this->lists['order']; ?>" />
<input type="hidden" name="filter_order_Dir" value="" />
</tr>
</table>
<?php echo JHTML::_( 'form.token' ); ?>
</form>
</fieldset>
4. \administrator\components\com_joomleague\models\teamplayers.php
в модель добавлена функция - ! sports_type_id - это id вида спорта, ставьте свое значение
function getProjectsBySportsType()
{
$query = "SELECT id, name FROM #__joomleague_project as p
WHERE sports_type_id=1
AND published=1 ";
if ($season) {
$query .= ' AND season_id = '.(int) $season;
}
$query .= " ORDER BY p.ordering, p.name ASC ";
$this->_db->setQuery($query);
if (!$result = $this->_db->loadObjectList())
{
$this->setError($this->_db->getErrorMsg());
return false;
}
return $result;
}
Все работает!
P.S. Если кому-то сложно добавить вышеуказанное (хотя вроде подробно все написал), то ообращайтесь помогу за вознаграждение :-)