diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index de03eb6ab..efee2c7b5 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -94,6 +94,12 @@ + + + diff --git a/src/com/magento/idea/magento2plugin/actions/CopyMagentoPath.java b/src/com/magento/idea/magento2plugin/actions/CopyMagentoPath.java new file mode 100644 index 000000000..9ba6a9405 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/CopyMagentoPath.java @@ -0,0 +1,71 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions; + +import com.intellij.ide.actions.CopyPathProvider; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiManager; +import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class CopyMagentoPath extends CopyPathProvider { + public static final String PHTML = "phtml"; + public static final String PHTML_SEPARATOR = "::"; + private int index; + private final String[] templatePaths = { + "view/frontend/templates/", + "view/adminhtml/templates/", + "view/base/templates/" + }; + + @Override + public void update(@NotNull final AnActionEvent event) { + final VirtualFile virtualFile = event.getData(PlatformDataKeys.VIRTUAL_FILE); + if (virtualFile != null && virtualFile.isDirectory()) { + event.getPresentation().setVisible(false); + } + } + + @Nullable + @Override + public String getPathToElement( + @NotNull final Project project, + @Nullable final VirtualFile virtualFile, + @Nullable final Editor editor + ) { + final PsiDirectory directory + = PsiManager.getInstance(project).findFile(virtualFile).getContainingDirectory(); + final StringBuilder fullPath = new StringBuilder(virtualFile.getPath()); + final StringBuilder magentoPath + = new StringBuilder(GetModuleNameByDirectoryUtil.execute(directory, project)); + String path = fullPath.toString(); + + if (PHTML.equals(virtualFile.getExtension())) { + index = -1; + final int endIndex = getIndexOf(fullPath, templatePaths[++index]); + final int offset = templatePaths[index].length(); + + fullPath.replace(0, endIndex + offset, ""); + magentoPath.append(PHTML_SEPARATOR); + magentoPath.append(fullPath); + path = magentoPath.toString(); + } + + return path; + } + + private int getIndexOf(final StringBuilder fullPath, final String path) { + return fullPath.lastIndexOf(path) == -1 + ? getIndexOf(fullPath, templatePaths[++index]) + : fullPath.lastIndexOf(path); + } +}