diff --git a/.idea/workspace.xml b/.idea/workspace.xml index d4b117e..8efff53 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -63,10 +63,10 @@ - - + + - + @@ -75,52 +75,25 @@ - + - - + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -139,8 +112,6 @@ @@ -524,7 +497,33 @@ - - - - - - - - - - - - - - - @@ -1059,13 +987,6 @@ - - - - - - - @@ -1080,20 +1001,6 @@ - - - - - - - - - - - - - - @@ -1101,13 +1008,6 @@ - - - - - - - @@ -1122,20 +1022,6 @@ - - - - - - - - - - - - - - @@ -1143,9 +1029,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + diff --git a/DB_Changes.txt b/DB_Changes.txt index 604ccfc..126ff74 100644 --- a/DB_Changes.txt +++ b/DB_Changes.txt @@ -19,4 +19,33 @@ othervalues -> ms4_othervalues updates -> ms4_updates updates -> 'Name' is primary key updates -> Adjust 'Link' -updates -> 'Name' Type is VARCHAR(64) \ No newline at end of file +updates -> 'Name' Type is VARCHAR(64) +updates -> Removed col 'Log' + +updateslog -> new table +db->createCommand('SELECT * FROM {{updates}}')->queryAll(); +$transaction=Yii::app()->db->beginTransaction(); +foreach($rows as $row) { + $prog = $row['Name']; + $log = $row['Log']; + $lines = explode('
', $log); + + foreach ($lines as $line) { + $result = array(); + preg_match('/([^ ]+)[^0-9]*([0-9\.]+)[^\(]*\((.*?)\)/', $line, $result); + + if (count($result) == 4) { + $ip = trim($result[1]); + $version = trim($result[2]); + $date = DateTime::createFromFormat('d.m.Y - H:i:s', trim($result[3])); + + echo $prog . ' | ' . $ip . ' | ' . $version . ' | ' . $date->format('Y-m-d H:i:s') . '
'; + + Yii::app()->db->createCommand("INSERT INTO {{updateslog}} (programname, ip, version, date) VALUES ('$prog', '$ip', '$version', '" . $date->format('Y-m-d H:i:s') . "')")->execute(); + } + } + echo '
'; +} +$transaction->commit(); +?> \ No newline at end of file diff --git a/www/protected/models/Program.php b/www/protected/models/Program.php index 4ddd845..8cf1ef2 100644 --- a/www/protected/models/Program.php +++ b/www/protected/models/Program.php @@ -23,6 +23,8 @@ * @property integer $uses_absCanv * @property string $update_identifier * @property integer $highscore_gid + * + * @property ProgramUpdates $version */ class Program extends CActiveRecord { @@ -58,9 +60,14 @@ class Program extends CActiveRecord */ public function relations() { - // NOTE: you may need to adjust the relation name and the related - // class name for the relations automatically generated below. return array( + 'version' => + [ + self::HAS_ONE, + 'ProgramUpdates', + [ + 'Name' => 'update_identifier' + ]], ); } @@ -197,12 +204,4 @@ class Program extends CActiveRecord return $out; } - - public function hasVersionInfo() { - return ! empty($this->update_identifier); - } - - public function getVersionInfo() { - return 0; //TODO - } } diff --git a/www/protected/models/ProgramUpdates.php b/www/protected/models/ProgramUpdates.php new file mode 100644 index 0000000..329beda --- /dev/null +++ b/www/protected/models/ProgramUpdates.php @@ -0,0 +1,103 @@ +64), + // The following rule is used by search(). + array('Name, Version, Link', 'safe', 'on'=>'search'), + ); + } + + /** + * @return array relational rules. + */ + public function relations() + { + // NOTE: you may need to adjust the relation name and the related + // class name for the relations automatically generated below. + return array( + 'log' => + [ + self::HAS_MANY, + 'ProgramUpdatesLog', + [ + 'programname' => 'Name' + ]], + ); + } + + /** + * @return array customized attribute labels (name=>label) + */ + public function attributeLabels() + { + return array( + 'Name' => 'Name', + 'Version' => 'Version', + 'Link' => 'Link', + ); + } + + /** + * Retrieves a list of models based on the current search/filter conditions. + * + * Typical usecase: + * - Initialize the model fields with values from filter form. + * - Execute this method to get CActiveDataProvider instance which will filter + * models according to data in model fields. + * - Pass data provider to CGridView, CListView or any similar widget. + * + * @return CActiveDataProvider the data provider that can return the models + * based on the search/filter conditions. + */ + public function search() + { + $criteria=new CDbCriteria; + + $criteria->compare('Name',$this->Name,true); + $criteria->compare('Version',$this->Version,true); + $criteria->compare('Link',$this->Link,true); + + return new CActiveDataProvider($this, array( + 'criteria'=>$criteria, + )); + } + + /** + * Returns the static model of the specified AR class. + * Please note that you should have this exact method in all your CActiveRecord descendants! + * @param string $className active record class name. + * @return ProgramUpdates the static model class + */ + public static function model($className=__CLASS__) + { + return parent::model($className); + } +} diff --git a/www/protected/models/ProgramUpdatesLog.php b/www/protected/models/ProgramUpdatesLog.php new file mode 100644 index 0000000..491bd0f --- /dev/null +++ b/www/protected/models/ProgramUpdatesLog.php @@ -0,0 +1,102 @@ +64), + array('ip', 'length', 'max'=>24), + array('date', 'safe'), + // The following rule is used by search(). + array('ID, programname, ip, version, date', 'safe', 'on'=>'search'), + ); + } + + /** + * @return array relational rules. + */ + public function relations() + { + // NOTE: you may need to adjust the relation name and the related + // class name for the relations automatically generated below. + return array( + ); + } + + /** + * @return array customized attribute labels (name=>label) + */ + public function attributeLabels() + { + return array( + 'ID' => 'ID', + 'programname' => 'Programname', + 'ip' => 'Ip', + 'version' => 'Version', + 'date' => 'Date', + ); + } + + /** + * Retrieves a list of models based on the current search/filter conditions. + * + * Typical usecase: + * - Initialize the model fields with values from filter form. + * - Execute this method to get CActiveDataProvider instance which will filter + * models according to data in model fields. + * - Pass data provider to CGridView, CListView or any similar widget. + * + * @return CActiveDataProvider the data provider that can return the models + * based on the search/filter conditions. + */ + public function search() + { + + $criteria=new CDbCriteria; + + $criteria->compare('ID',$this->ID); + $criteria->compare('programname',$this->programname,true); + $criteria->compare('ip',$this->ip,true); + $criteria->compare('version',$this->version,true); + $criteria->compare('date',$this->date,true); + + return new CActiveDataProvider($this, array( + 'criteria'=>$criteria, + )); + } + + /** + * Returns the static model of the specified AR class. + * Please note that you should have this exact method in all your CActiveRecord descendants! + * @param string $className active record class name. + * @return ProgramUpdatesLog the static model class + */ + public static function model($className=__CLASS__) + { + return parent::model($className); + } +} diff --git a/www/protected/views/programs/view.php b/www/protected/views/programs/view.php index a7e5ee6..d42b65e 100644 --- a/www/protected/views/programs/view.php +++ b/www/protected/views/programs/view.php @@ -44,10 +44,12 @@ if (!$model->visible && Yii::app()->user->name != 'admin') { Added: getDateTime()->format('d.m.Y'), array('color' => TbHtml::BADGE_COLOR_INFO)); ?> - - Version: - TbHtml::BADGE_COLOR_INFO)); ?> - + version != null): ?> + + Version: + version->Version, array('color' => TbHtml::BADGE_COLOR_INFO)); ?> + +