ampache/ampache

View on GitHub
public/templates/show_recently_skipped.inc.php

Summary

Maintainability
D
2 days
Test Coverage

Argument 3 (value) is float but \nT_() takes int|string defined at /code/src/Config/functions.php:1176
Open

                $time_string = sprintf(nT_('%d year ago', '%d years ago', $interval), $interval);

Call to method get_f_link from undeclared class \Ampache\Repository\Model\Song
Open

                <td class="cel_song"><?php echo $song->get_f_link(); ?></td>

Call to method get_icon from undeclared class \Ampache\Module\Util\Ui
Open

                        <?php echo Ui::get_icon('playlist_add', T_('Add to playlist')); ?>

Call to method check_autoplay_append from undeclared class \Ampache\Module\Playback\Stream_Playlist
Open

                            <?php if (Stream_Playlist::check_autoplay_append()) { ?>

Call to method get_display from undeclared class \Ampache\Module\Util\Rss\AmpacheRss
Open

$link      = AmpConfig::get('use_rss') ? ' ' . AmpacheRss::get_display('recently_skipped', $user_id) : '';

Call to method __construct from undeclared class \Ampache\Repository\Model\Song
Open

    $song     = new Song($row['object_id']);

Call to deprecated function \Ampache\Module\Authorization\Access::check() defined at /code/src/Module/Authorization/Access.php:154
Open

$is_admin  = Access::check('interface', 100);

Variable $data is undeclared
Open

foreach ($data as $row) {

Argument 3 (value) is float but \nT_() takes int|string defined at /code/src/Config/functions.php:1176
Open

                $time_string = sprintf(nT_('%d decade ago', '%d decades ago', $interval), $interval);

Call to method show_box_bottom from undeclared class \Ampache\Module\Util\Ui
Open

<?php Ui::show_box_bottom(); ?>

Argument 3 (value) is float but \nT_() takes int|string defined at /code/src/Config/functions.php:1176
Open

                $time_string = sprintf(nT_('%d day ago', '%d days ago', $interval), $interval);

Reference to instance property f_album_link from undeclared class \Ampache\Repository\Model\Song
Open

                <td class="cel_album"><?php echo $song->f_album_link; ?></td>

Variable $data is undeclared
Open

    <?php if (!count($data)) { ?>

Call to method __construct from undeclared class \Ampache\Repository\Model\User
Open

    $row_user = new User($row_id);

Argument 3 (value) is float but \nT_() takes int|string defined at /code/src/Config/functions.php:1176
Open

                $time_string = sprintf(nT_('%d minute ago', '%d minutes ago', $interval), $interval);

Reference to instance property fullname from undeclared class \Ampache\Repository\Model\User
Open

                            <?php echo scrub_out($row_user->fullname); ?>

Argument 3 (value) is float but \nT_() takes int|string defined at /code/src/Config/functions.php:1176
Open

                $time_string = sprintf(nT_('%d month ago', '%d months ago', $interval), $interval);

Call to method check_autoplay_next from undeclared class \Ampache\Module\Playback\Stream_Playlist
Open

                            <?php if (Stream_Playlist::check_autoplay_next()) { ?>

Reference to instance property id from undeclared class \Ampache\Repository\Model\Song
Open

                    <a id="<?php echo 'add_playlist_' . $count . '_' . $song->id; ?>" onclick="showPlaylistDialog(event, 'song', '<?php echo $song->id; ?>')">

Argument 3 (value) is float but \nT_() takes int|string defined at /code/src/Config/functions.php:1176
Open

                $time_string = sprintf(nT_('%d hour ago', '%d hours ago', $interval), $interval);

Reference to instance property id from undeclared class \Ampache\Repository\Model\Song
Open

                                <?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id . '&playnext=true', 'play_next', T_('Play next'), 'nextplay_song_' . $count . '_' . $song->id); ?>

Reference to instance property id from undeclared class \Ampache\Repository\Model\User
Open

                        <a href="<?php echo $web_path; ?>/stats.php?action=show_user&user_id=<?php echo scrub_out((string)$row_user->id); ?>">

Call to method show_box_top from undeclared class \Ampache\Module\Util\Ui
Open

UI::show_box_top(T_('Recently Skipped') . $link, 'box box_recently_skipped'); ?>

Argument 3 (value) is float but \nT_() takes int|string defined at /code/src/Config/functions.php:1176
Open

                $time_string = sprintf(nT_('%d week ago', '%d weeks ago', $interval), $interval);

Reference to instance property id from undeclared class \Ampache\Repository\Model\Song
Open

                    <?php echo Ajax::button('?action=basket&type=song&id=' . $song->id, 'add', T_('Add to Temporary Playlist'), 'add_' . $count . '_' . $song->id); ?>

Call to method format from undeclared class \Ampache\Repository\Model\Song
Open

        $song->format(); ?>

Reference to instance property id from undeclared class \Ampache\Repository\Model\Song
Open

                                <?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id . '&append=true', 'play_add', T_('Play last'), 'addplay_song_' . $count . '_' . $song->id); ?>

Reference to instance property year from undeclared class \Ampache\Repository\Model\Song
Open

                <td class="cel_year"><?php echo $song->year; ?></td>

Call to method get_icon from undeclared class \Ampache\Module\Util\Ui
Open

                        echo Ui::get_icon('info', $agent); ?>

Reference to instance property id from undeclared class \Ampache\Repository\Model\Song
Open

                            <?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id, 'play', T_('Play'), 'play_song_' . $count . '_' . $song->id); ?>

Call to method get_f_artist_link from undeclared class \Ampache\Repository\Model\Song
Open

                <td class="cel_artist"><?php echo $song->get_f_artist_link(); ?></td>

Define a constant instead of duplicating this literal "?page=stream&action=directplay&object_type=song&object_id=" 3 times.
Open

                            <?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id, 'play', T_('Play'), 'play_song_' . $count . '_' . $song->id); ?>

Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences.

On the other hand, constants can be referenced from many places, but only need to be updated in a single place.

Noncompliant Code Example

With the default threshold of 3:

function run() {
  prepare('action1');                              // Non-Compliant - 'action1' is duplicated 3 times
  execute('action1');
  release('action1');
}

Compliant Solution

ACTION_1 = 'action1';

function run() {
  prepare(ACTION_1);
  execute(ACTION_1);
  release(ACTION_1);
}

Exceptions

To prevent generating some false-positives, literals having less than 5 characters are excluded.

Identical blocks of code found in 2 locations. Consider refactoring.
Open

        if ($is_allowed_time) {
            $interval = (int) (time() - ($row['date'] ?? 0));

            if ($interval < 60) {
                $time_string = sprintf(nT_('%d second ago', '%d seconds ago', $interval), $interval);
Severity: Major
Found in public/templates/show_recently_skipped.inc.php and 1 other location - About 2 days to fix
public/templates/show_recently_played_all.inc.php on lines 94..121

Duplicated Code

Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

Tuning

This issue has a mass of 456.

We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

Refactorings

Further Reading

Identical blocks of code found in 2 locations. Consider refactoring.
Open

                        <?php if (AmpConfig::get('directplay')) { ?>
                            <?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id, 'play', T_('Play'), 'play_song_' . $count . '_' . $song->id); ?>
                            <?php if (Stream_Playlist::check_autoplay_next()) { ?>
                                <?php echo Ajax::button('?page=stream&action=directplay&object_type=song&object_id=' . $song->id . '&playnext=true', 'play_next', T_('Play next'), 'nextplay_song_' . $count . '_' . $song->id); ?>
                            <?php } ?>
Severity: Major
Found in public/templates/show_recently_skipped.inc.php and 1 other location - About 5 hrs to fix
public/templates/show_recently_played.inc.php on lines 121..129

Duplicated Code

Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

Tuning

This issue has a mass of 184.

We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

Refactorings

Further Reading

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $song     = new Song($row['object_id']);

Line indented incorrectly; expected 16 spaces, found 12
Open

            } elseif ($interval < 3600) {

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d year ago', '%d years ago', $interval), $interval);

Line indented incorrectly; expected 16 spaces, found 12
Open

            } elseif ($interval < 604800) {

Line indented incorrectly; expected at least 12 spaces, found 8
Open

        $song->format(); ?>

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $is_allowed_recent  = $is_admin || $user_id == $row_id || $has_allowed_recent;

Line indented incorrectly; expected 16 spaces, found 12
Open

            } elseif ($interval < 86400) {

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d hour ago', '%d hours ago', $interval), $interval);

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $interval    = floor($interval / 86400);

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d month ago', '%d months ago', $interval), $interval);

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $interval    = floor($interval / 60);

Line indented incorrectly; expected 16 spaces, found 12
Open

            } else {

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $time_string        = '-';

Line indented incorrectly; expected 16 spaces, found 12
Open

            if ($interval < 60) {

Line indented incorrectly; expected 16 spaces, found 12
Open

            } elseif ($interval < 631138519) {

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $is_allowed_time    = $is_admin || $user_id == $row_id || $has_allowed_time;

Line indented incorrectly; expected 16 spaces, found 12
Open

            } elseif ($interval < 2592000) {

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $row_user = new User($row_id);

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $interval    = floor($interval / 3600);

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d decade ago', '%d decades ago', $interval), $interval);

Line indented incorrectly; expected 8 spaces, found 4
Open

    }

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $agent              = ($is_admin) ? $row['agent'] : '';

Line indented incorrectly; expected 12 spaces, found 8
Open

        if ($is_allowed_time) {

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $interval    = floor($interval / 604800);

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $has_allowed_time   = (bool) $row['user_time'];

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $interval    = floor($interval / 31556926);

Line indented incorrectly; expected 4 spaces, found 0
Open

} ?>

Line indented incorrectly; expected 16 spaces, found 12
Open

            }

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d week ago', '%d weeks ago', $interval), $interval);

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $interval    = floor($interval / 315569260);

Line indented incorrectly; expected 0 spaces, found 20
Open

                    } ?>

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $row_id   = ($row['user'] > 0) ? (int) $row['user'] : -1;

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d second ago', '%d seconds ago', $interval), $interval);

Line indented incorrectly; expected 8 spaces, found 4
Open

    if ($is_allowed_recent) {

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d day ago', '%d days ago', $interval), $interval);

Line indented incorrectly; expected 16 spaces, found 12
Open

            } elseif ($interval < 31556926) {

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $interval    = floor($interval / 2592000);

Line indented incorrectly; expected 12 spaces, found 8
Open

        }

Line indented incorrectly; expected 4 spaces, found 0
Open

foreach ($data as $row) {

Line indented incorrectly; expected at least 8 spaces, found 4
Open

    $has_allowed_recent = (bool) $row['user_recent'];

Line indented incorrectly; expected at least 16 spaces, found 12
Open

            $interval = (int) (time() - ($row['date'] ?? 0));

Line indented incorrectly; expected at least 20 spaces, found 16
Open

                $time_string = sprintf(nT_('%d minute ago', '%d minutes ago', $interval), $interval);

There are no issues that match your filters.

Category
Status