Just sell him. Why would you want to keep a player who has been unhappy for 2 years? Sell him and buy someone younger and better who wants to play for you.
On my Forest game Nathan Tyson became unhappy and wanted to move to a bigger club even though we're top of League One and he was my top scorer. I tried to keep him but he slapped in a transfer request. I agreed to sell him, and Leeds bid for him and are due to buy him at the end of the season. Leeds are in the League One relegation zone and when I get promoted to the Championship, they could be in League Two!!! Serves my petulant striker right!