Hi Guys thanks for your discussion here,that will surely gonna help me.
<?php
class MediaController extends Controller
{
/**
* @var string the default layout for the views. Defaults to '//layouts/column2', meaning
* using two-column layout. See 'protected/views/layouts/column2.php'.
*/
public $layout='//layouts/column2';
private $dataProvider;
/**
* @return array action filters
*/
public function filters()
{
return array(
'accessControl', // perform access control for CRUD operations
'postOnly + delete', // we only allow deletion via POST request
);
}
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow', // allow admin user to perform 'admin' and 'delete' actions
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
/**
* Displays a particular model.
* @param integer $id the ID of the model to be displayed
*/
public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id),
));
}
/**
* Creates a new model.
* If creation is successful, the browser will be redirected to the 'view' page.
*/
public function actionCreate()
{
$model=new Media;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Media']))
{
$dir = Yii::getPathOfAlias('application.uploaded');
//$dir = Yii::app()->request->baseUrl."/protected/uploaded";
$file = CUploadedFile::getInstance($model,'path');
$model->attributes=$_POST['Media'];
$file===NULL?$model->validate():$model->path = $dir."\\".$model->name;
if($model->validate())
{
if($model->save())
{
$uploded = $file->saveAs($dir."/".$model->name.".mp3");
Media::model()->associateMediaToGenre($model->id,$model->genre);
$this->redirect(array('view','id'=>$model->id));
}
}
}
$this->render('create',array(
'model'=>$model,
));
}
/**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id the ID of the model to be updated
*/
public function actionUpdate($id)
{
$model=$this->loadModel($id);
$this->getSelectedGenre($id);
$selectedGenre = Media::model()->selectMediaToGenre($id);
for($i=0;$i<count($selectedGenre);$i++)
{
foreach($selectedGenre[$i] as $genId)
$model->genre[$i+1] = $genId;
}
//var_dump($model->genre);exit;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Media']))
{
$dir = Yii::getPathOfAlias('application.uploaded');
$file = CUploadedFile::getInstance($model,'path');
$model->attributes=$_POST['Media'];
$model->path = $dir."\\".$model->name;
if($model->save())
{
if(is_object($model->path))
$uploded = $file->saveAs($dir."\\".$model->name.".mp3");
Media::model()->associateMediaToGenre($model->id,$model->genre);
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('update',array(
'model'=>$model,
));
}
/**
* Deletes a particular model.
* If deletion is successful, the browser will be redirected to the 'admin' page.
* @param integer $id the ID of the model to be deleted
*/
public function actionDelete($id)
{
$this->loadModel($id)->delete();
// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
/**
* Lists all models.
*/
public function actionIndex($params=null)
{
if(isset($_POST['q']))
$this->searchSong($_POST['q']);
if(isset($params))
{
if($params=="pop")
$ordr = "views";
elseif($params =="fav")
$ordr = "top";
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}
else $ordr="null";
$criteria = new CDbCriteria();
$criteria->order= "$ordr".' DESC,id DESC';
$criteria->with = array('tblGenres');
$criteria->limit = 1;
$this->dataProvider=new CActiveDataProvider('Media',array(
'criteria'=>$criteria,
));
$this->render('index',array(
'dataProvider'=>$this->dataProvider
));
}
/**
* Manages all models.
*/
public function actionAdmin()
{
$model=new Media('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['Media']))
$model->attributes=$_GET['Media'];
$this->render('admin',array(
'model'=>$model,
));
}
/**
* Returns the data model based on the primary key given in the GET variable.
* If the data model is not found, an HTTP exception will be raised.
* @param integer the ID of the model to be loaded
*/
public function loadModel($id)
{
$model=Media::model()->findByPk($id);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}
/**
* Performs the AJAX validation.
* @param CModel the model to be validated
*/
protected function performAjaxValidation($model)
{
if(isset($_POST['ajax']) && $_POST['ajax']==='media-form')
{
echo CActiveForm::validate($model);
Yii::app()->end();
}
}
/**
*
* @return type URL.
* Return Path URL of video.
*/
Public function actionPlayer($param=null)
{
$count=0;
$criteria = new CDbCriteria();
$criteria->order= 'id DESC';
$criteria->with = array('tblGenres');
$criteria->limit = 10;
$this->dataProvider=new CActiveDataProvider('Media',array(
'criteria'=>$criteria,
));
$VideoPath=$this->dataProvider->getData();
foreach($VideoPath as $model)
$_pathUrl[]=$model->path;
if($param==NULL){
return substr($_pathUrl[0].".mp3",'24');
}
//As you can see i am trying to change my track when click on
//previous and next button.For that i want to store my current value.
[b]else if($param=="pre")
{
$count--;
return substr($_pathUrl[$count].".mp3",'24');
}
else if($param=="next")
{
$count++;
return substr($_pathUrl[$count].".mp3",'24');
}[/b]
}
/**
* Search song by Title.
*/
Private function searchSong($q)
{
$criteria = new CDbCriteria();
$criteria->compare('name', $q, true);
$criteria->order= 'views DESC,id DESC';
$this->dataProvider=new CActiveDataProvider("Media", array('criteria'=>$criteria));
$this->render('index',array(
'dataProvider'=>$this->dataProvider,
));
}
}
I am not able to store value for $count so that i can decrease or increase when i call pre or next. i
This is the way i am calling actionPlayer().
<script>
function playerHandler(str){
var audio = document.getElementById('audioPlayer');
if(str=="play"){
audio.play();
}
else if(str=="stop"){
audio.pause();
}
else if(str=="pre"){
var pre = "<?php echo addcslashes($this->actionPlayer('pre'),'\\') ; ?>";
audio.src= pre;
}
else if(str=="next"){
var next = "<?php echo addcslashes($this->actionPlayer('pre'),'\\') ; ?>";
audio.src= next;
}
/* function callAjax(){
$.ajax({
'url':<?php echo $this->actionPlayer('pre') ; ?>
})
//var pre = "<?php echo addcslashes($this->actionPlayer('pre'),'\\') ; ?>";
//audio.src= pre;
}*/
}
</script>
That will be very very helpful if you can tell me the best way to store that value.If i am not bothering you then i have few more question here.
1)How to store $count
2)In actionPlayer() function limit is not working here too
.
3)I had to write same code in search(), is there any way so that store that value $this->dataProvider=new CActiveDataProvider(‘Media’,array(
'criteria'=>$criteria,
));.
Note:-Can not define private static $count=0; in class having error .